diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 6acdf5e29f8..2db20e67a2d 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -6,11 +6,9 @@ ../.. 4.0.0 - com.wordnik swagger-codegen jar swagger-codegen (core library) - 2.1.1-M2-SNAPSHOT src/main/java install diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenResponse.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenResponse.java index c4d9d2c6ed7..02627eec1bd 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenResponse.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenResponse.java @@ -1,11 +1,13 @@ package com.wordnik.swagger.codegen; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public class CodegenResponse { public String code, message; public Boolean hasMore; - public List> examples; + public List> examples; public final List headers = new ArrayList(); public String dataType, baseType, containerType; public Boolean isDefault; @@ -16,4 +18,4 @@ public class CodegenResponse { public Object schema; public String jsonSchema; public boolean isWildcard() { return "0".equals(code) || "default".equals(code); } -} \ No newline at end of file +} diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index 9bb3c6e13b3..d8bdb01514d 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -1,26 +1,58 @@ package com.wordnik.swagger.codegen; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.wordnik.swagger.codegen.examples.ExampleGenerator; -import com.wordnik.swagger.models.*; +import com.wordnik.swagger.models.ArrayModel; +import com.wordnik.swagger.models.Model; +import com.wordnik.swagger.models.ModelImpl; +import com.wordnik.swagger.models.Operation; +import com.wordnik.swagger.models.RefModel; +import com.wordnik.swagger.models.Response; +import com.wordnik.swagger.models.Swagger; import com.wordnik.swagger.models.auth.ApiKeyAuthDefinition; import com.wordnik.swagger.models.auth.BasicAuthDefinition; import com.wordnik.swagger.models.auth.In; import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; -import com.wordnik.swagger.models.parameters.*; -import com.wordnik.swagger.models.properties.*; +import com.wordnik.swagger.models.parameters.BodyParameter; +import com.wordnik.swagger.models.parameters.CookieParameter; +import com.wordnik.swagger.models.parameters.FormParameter; +import com.wordnik.swagger.models.parameters.HeaderParameter; +import com.wordnik.swagger.models.parameters.Parameter; +import com.wordnik.swagger.models.parameters.PathParameter; +import com.wordnik.swagger.models.parameters.QueryParameter; +import com.wordnik.swagger.models.parameters.SerializableParameter; +import com.wordnik.swagger.models.properties.AbstractNumericProperty; +import com.wordnik.swagger.models.properties.ArrayProperty; +import com.wordnik.swagger.models.properties.BooleanProperty; +import com.wordnik.swagger.models.properties.DateProperty; +import com.wordnik.swagger.models.properties.DateTimeProperty; +import com.wordnik.swagger.models.properties.DecimalProperty; +import com.wordnik.swagger.models.properties.DoubleProperty; +import com.wordnik.swagger.models.properties.FloatProperty; +import com.wordnik.swagger.models.properties.IntegerProperty; +import com.wordnik.swagger.models.properties.LongProperty; +import com.wordnik.swagger.models.properties.MapProperty; +import com.wordnik.swagger.models.properties.Property; +import com.wordnik.swagger.models.properties.PropertyBuilder; +import com.wordnik.swagger.models.properties.RefProperty; +import com.wordnik.swagger.models.properties.StringProperty; import com.wordnik.swagger.util.Json; -import org.apache.commons.lang.StringUtils; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.util.*; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class DefaultCodegen { Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); @@ -1015,9 +1047,9 @@ public class DefaultCodegen { if(schemes == null) return null; - List secs = new ArrayList(); - for(Iterator entries = schemes.entrySet().iterator(); entries.hasNext(); ) { - Map.Entry entry = (Map.Entry) entries.next(); + List secs = new ArrayList(schemes.size()); + for (Iterator> it = schemes.entrySet().iterator(); it.hasNext();) { + final Map.Entry entry = it.next(); final SecuritySchemeDefinition schemeDefinition = entry.getValue(); CodegenSecurity sec = CodegenModelFactory.newInstance(CodegenModelType.SECURITY); @@ -1037,23 +1069,21 @@ public class DefaultCodegen { sec.isOAuth = !sec.isBasic; } - sec.hasMore = entries.hasNext(); + sec.hasMore = it.hasNext(); secs.add(sec); } return secs; } - protected List> toExamples(Map examples) { + protected List> toExamples(Map examples) { if(examples == null) return null; - List> output = new ArrayList>(); - for(String key: examples.keySet()) { - String value = String.valueOf(examples.get(key)); - - Map kv = new HashMap(); - kv.put("contentType", key); - kv.put("example", value); + final List> output = new ArrayList>(examples.size()); + for(Map.Entry entry : examples.entrySet()) { + final Map kv = new HashMap(); + kv.put("contentType", entry.getKey()); + kv.put("example", entry.getValue()); output.add(kv); } return output; diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java index b0fbf34a07f..51d10f7e8a6 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java @@ -1,19 +1,33 @@ package com.wordnik.swagger.codegen.examples; -import com.wordnik.swagger.models.*; -import com.wordnik.swagger.models.properties.*; -import com.wordnik.swagger.util.Json; - -import java.text.SimpleDateFormat; - - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; - - import java.math.BigDecimal; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.wordnik.swagger.models.Model; +import com.wordnik.swagger.models.ModelImpl; +import com.wordnik.swagger.models.properties.ArrayProperty; +import com.wordnik.swagger.models.properties.BooleanProperty; +import com.wordnik.swagger.models.properties.DateProperty; +import com.wordnik.swagger.models.properties.DateTimeProperty; +import com.wordnik.swagger.models.properties.DecimalProperty; +import com.wordnik.swagger.models.properties.DoubleProperty; +import com.wordnik.swagger.models.properties.FileProperty; +import com.wordnik.swagger.models.properties.FloatProperty; +import com.wordnik.swagger.models.properties.IntegerProperty; +import com.wordnik.swagger.models.properties.LongProperty; +import com.wordnik.swagger.models.properties.MapProperty; +import com.wordnik.swagger.models.properties.ObjectProperty; +import com.wordnik.swagger.models.properties.Property; +import com.wordnik.swagger.models.properties.RefProperty; +import com.wordnik.swagger.models.properties.StringProperty; +import com.wordnik.swagger.models.properties.UUIDProperty; +import com.wordnik.swagger.util.Json; public class ExampleGenerator { protected Map examples; @@ -37,7 +51,6 @@ public class ExampleGenerator { String example = Json.pretty(resolvePropertyToExample(mediaType, property, processedModels)); if(example != null) { - example = example.replaceAll("\n", "\\\\n"); kv.put("example", example); output.add(kv); } @@ -45,7 +58,6 @@ public class ExampleGenerator { else if(property != null && mediaType.startsWith("application/xml")) { String example = new XmlExampleGenerator(this.examples).toXml(property); if(example != null) { - example = example.replaceAll("\n", "\\\\n"); kv.put("example", example); output.add(kv); } @@ -53,12 +65,10 @@ public class ExampleGenerator { } } else { - for(String key: examples.keySet()) { - String value = String.valueOf(examples.get(key)); - - Map kv = new HashMap(); - kv.put("contentType", key); - kv.put("example", value); + for(Map.Entry entry: examples.entrySet()) { + final Map kv = new HashMap(); + kv.put("contentType", entry.getKey()); + kv.put("example", Json.pretty(entry.getValue())); output.add(kv); } } diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java index 0c6e6067607..9d516c398f6 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java @@ -1,11 +1,19 @@ package com.wordnik.swagger.codegen.languages; -import com.wordnik.swagger.codegen.*; -import com.wordnik.swagger.util.Json; -import com.wordnik.swagger.models.properties.*; - -import java.util.*; import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.wordnik.swagger.codegen.CodegenConfig; +import com.wordnik.swagger.codegen.CodegenOperation; +import com.wordnik.swagger.codegen.CodegenParameter; +import com.wordnik.swagger.codegen.CodegenResponse; +import com.wordnik.swagger.codegen.CodegenType; +import com.wordnik.swagger.codegen.DefaultCodegen; +import com.wordnik.swagger.codegen.SupportingFile; public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig { protected String apiVersion = "1.0.0"; @@ -156,8 +164,10 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig @Override public Map postProcessOperations(Map objs) { - Map objectMap = (Map)objs.get("operations"); - List operations = (List)objectMap.get("operation"); + @SuppressWarnings("unchecked") + Map objectMap = (Map) objs.get("operations"); + @SuppressWarnings("unchecked") + List operations = (List) objectMap.get("operation"); for(CodegenOperation operation : operations) { operation.httpMethod = operation.httpMethod.toLowerCase(); List params = operation.allParams; @@ -170,20 +180,14 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig resp.code = "default"; } } - if(operation.examples != null && operation.examples.size() > 0) { - List> examples = operation.examples; - for(int i = examples.size() - 1; i >= 0; i--) { - Map example = examples.get(i); - String contentType = example.get("contentType"); - if(contentType != null && contentType.indexOf("application/json") == 0) { - String jsonExample = example.get("example"); - if(jsonExample != null) { - jsonExample = jsonExample.replaceAll("\\\\n", "\n"); - example.put("example", jsonExample); - } + if(operation.examples != null && !operation.examples.isEmpty()) { + // Leave application/json* items only + for (Iterator> it = operation.examples.iterator(); it.hasNext();) { + final Map example = it.next(); + final String contentType = example.get("contentType"); + if (contentType == null || !contentType.startsWith("application/json")) { + it.remove(); } - else - examples.remove(i); } } } diff --git a/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache b/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache index 99ecb80ac1a..ce881084bc2 100644 --- a/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache +++ b/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache @@ -35,7 +35,7 @@ {{#examples}}

Example data

Content-Type: {{{contentType}}}
-
{{{example}}}
+
{{example}}
{{/examples}}
diff --git a/modules/swagger-codegen/src/test/resources/2_0/petstore.json b/modules/swagger-codegen/src/test/resources/2_0/petstore.json index b4678fc3ab9..30c53134633 100644 --- a/modules/swagger-codegen/src/test/resources/2_0/petstore.json +++ b/modules/swagger-codegen/src/test/resources/2_0/petstore.json @@ -720,6 +720,18 @@ "description": "successful operation", "schema": { "$ref": "#/definitions/User" + }, + "examples": { + "application/json": { + "id": 1, + "username": "johnp", + "firstName": "John", + "lastName": "Public", + "email": "johnp@swagger.io", + "password": "-secret-", + "phone": "0123456789", + "userStatus": 0 + } } }, "400": { diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index 23187d581dd..e5b7b2c341f 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -6,11 +6,9 @@ 2.1.1-M2-SNAPSHOT ../.. - com.wordnik swagger-generator war swagger-generator - 2.1.1-M2-SNAPSHOT src/main/java