Skip to content

Commit 2d9772e

Browse files
committed
Merge branch 'tomtit-issue646' into develop_2.0
2 parents ef5cb50 + 0c1bdc0 commit 2d9772e

File tree

8 files changed

+129
-75
lines changed

8 files changed

+129
-75
lines changed

modules/swagger-codegen/pom.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66
<relativePath>../..</relativePath>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
9-
<groupId>com.wordnik</groupId>
109
<artifactId>swagger-codegen</artifactId>
1110
<packaging>jar</packaging>
1211
<name>swagger-codegen (core library)</name>
13-
<version>2.1.1-M2-SNAPSHOT</version>
1412
<build>
1513
<sourceDirectory>src/main/java</sourceDirectory>
1614
<defaultGoal>install</defaultGoal>
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.wordnik.swagger.codegen;
22

3-
import java.util.*;
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
46

57
public class CodegenResponse {
68
public String code, message;
79
public Boolean hasMore;
8-
public List<Map<String, String>> examples;
10+
public List<Map<String, Object>> examples;
911
public final List<CodegenProperty> headers = new ArrayList<CodegenProperty>();
1012
public String dataType, baseType, containerType;
1113
public Boolean isDefault;
@@ -16,4 +18,4 @@ public class CodegenResponse {
1618
public Object schema;
1719
public String jsonSchema;
1820
public boolean isWildcard() { return "0".equals(code) || "default".equals(code); }
19-
}
21+
}

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,58 @@
11
package com.wordnik.swagger.codegen;
22

3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.HashMap;
7+
import java.util.HashSet;
8+
import java.util.Iterator;
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.Set;
12+
import java.util.regex.Matcher;
13+
import java.util.regex.Pattern;
14+
15+
import org.apache.commons.lang.StringUtils;
16+
import org.slf4j.Logger;
17+
import org.slf4j.LoggerFactory;
18+
319
import com.wordnik.swagger.codegen.examples.ExampleGenerator;
4-
import com.wordnik.swagger.models.*;
20+
import com.wordnik.swagger.models.ArrayModel;
21+
import com.wordnik.swagger.models.Model;
22+
import com.wordnik.swagger.models.ModelImpl;
23+
import com.wordnik.swagger.models.Operation;
24+
import com.wordnik.swagger.models.RefModel;
25+
import com.wordnik.swagger.models.Response;
26+
import com.wordnik.swagger.models.Swagger;
527
import com.wordnik.swagger.models.auth.ApiKeyAuthDefinition;
628
import com.wordnik.swagger.models.auth.BasicAuthDefinition;
729
import com.wordnik.swagger.models.auth.In;
830
import com.wordnik.swagger.models.auth.SecuritySchemeDefinition;
9-
import com.wordnik.swagger.models.parameters.*;
10-
import com.wordnik.swagger.models.properties.*;
31+
import com.wordnik.swagger.models.parameters.BodyParameter;
32+
import com.wordnik.swagger.models.parameters.CookieParameter;
33+
import com.wordnik.swagger.models.parameters.FormParameter;
34+
import com.wordnik.swagger.models.parameters.HeaderParameter;
35+
import com.wordnik.swagger.models.parameters.Parameter;
36+
import com.wordnik.swagger.models.parameters.PathParameter;
37+
import com.wordnik.swagger.models.parameters.QueryParameter;
38+
import com.wordnik.swagger.models.parameters.SerializableParameter;
39+
import com.wordnik.swagger.models.properties.AbstractNumericProperty;
40+
import com.wordnik.swagger.models.properties.ArrayProperty;
41+
import com.wordnik.swagger.models.properties.BooleanProperty;
42+
import com.wordnik.swagger.models.properties.DateProperty;
43+
import com.wordnik.swagger.models.properties.DateTimeProperty;
44+
import com.wordnik.swagger.models.properties.DecimalProperty;
45+
import com.wordnik.swagger.models.properties.DoubleProperty;
46+
import com.wordnik.swagger.models.properties.FloatProperty;
47+
import com.wordnik.swagger.models.properties.IntegerProperty;
48+
import com.wordnik.swagger.models.properties.LongProperty;
49+
import com.wordnik.swagger.models.properties.MapProperty;
50+
import com.wordnik.swagger.models.properties.Property;
51+
import com.wordnik.swagger.models.properties.PropertyBuilder;
52+
import com.wordnik.swagger.models.properties.RefProperty;
53+
import com.wordnik.swagger.models.properties.StringProperty;
1154
import com.wordnik.swagger.util.Json;
1255

13-
import org.apache.commons.lang.StringUtils;
14-
15-
import org.slf4j.Logger;
16-
import org.slf4j.LoggerFactory;
17-
18-
import java.io.File;
19-
import java.util.*;
20-
21-
import java.util.regex.Matcher;
22-
import java.util.regex.Pattern;
23-
2456
public class DefaultCodegen {
2557
Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class);
2658

@@ -1015,9 +1047,9 @@ public List<CodegenSecurity> fromSecurity(Map<String, SecuritySchemeDefinition>
10151047
if(schemes == null)
10161048
return null;
10171049

1018-
List<CodegenSecurity> secs = new ArrayList<CodegenSecurity>();
1019-
for(Iterator entries = schemes.entrySet().iterator(); entries.hasNext(); ) {
1020-
Map.Entry<String, SecuritySchemeDefinition> entry = (Map.Entry<String, SecuritySchemeDefinition>) entries.next();
1050+
List<CodegenSecurity> secs = new ArrayList<CodegenSecurity>(schemes.size());
1051+
for (Iterator<Map.Entry<String, SecuritySchemeDefinition>> it = schemes.entrySet().iterator(); it.hasNext();) {
1052+
final Map.Entry<String, SecuritySchemeDefinition> entry = it.next();
10211053
final SecuritySchemeDefinition schemeDefinition = entry.getValue();
10221054

10231055
CodegenSecurity sec = CodegenModelFactory.newInstance(CodegenModelType.SECURITY);
@@ -1037,23 +1069,21 @@ public List<CodegenSecurity> fromSecurity(Map<String, SecuritySchemeDefinition>
10371069
sec.isOAuth = !sec.isBasic;
10381070
}
10391071

1040-
sec.hasMore = entries.hasNext();
1072+
sec.hasMore = it.hasNext();
10411073
secs.add(sec);
10421074
}
10431075
return secs;
10441076
}
10451077

1046-
protected List<Map<String, String>> toExamples(Map<String, Object> examples) {
1078+
protected List<Map<String, Object>> toExamples(Map<String, Object> examples) {
10471079
if(examples == null)
10481080
return null;
10491081

1050-
List<Map<String, String>> output = new ArrayList<Map<String, String>>();
1051-
for(String key: examples.keySet()) {
1052-
String value = String.valueOf(examples.get(key));
1053-
1054-
Map<String, String> kv = new HashMap<String, String>();
1055-
kv.put("contentType", key);
1056-
kv.put("example", value);
1082+
final List<Map<String, Object>> output = new ArrayList<Map<String, Object>>(examples.size());
1083+
for(Map.Entry<String, Object> entry : examples.entrySet()) {
1084+
final Map<String, Object> kv = new HashMap<String, Object>();
1085+
kv.put("contentType", entry.getKey());
1086+
kv.put("example", entry.getValue());
10571087
output.add(kv);
10581088
}
10591089
return output;

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
package com.wordnik.swagger.codegen.examples;
22

3-
import com.wordnik.swagger.models.*;
4-
import com.wordnik.swagger.models.properties.*;
5-
import com.wordnik.swagger.util.Json;
6-
7-
import java.text.SimpleDateFormat;
8-
9-
10-
import javax.xml.bind.JAXBContext;
11-
import javax.xml.bind.JAXBException;
12-
import javax.xml.bind.Marshaller;
13-
14-
153
import java.math.BigDecimal;
16-
import java.util.*;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.HashMap;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.Set;
11+
12+
import com.wordnik.swagger.models.Model;
13+
import com.wordnik.swagger.models.ModelImpl;
14+
import com.wordnik.swagger.models.properties.ArrayProperty;
15+
import com.wordnik.swagger.models.properties.BooleanProperty;
16+
import com.wordnik.swagger.models.properties.DateProperty;
17+
import com.wordnik.swagger.models.properties.DateTimeProperty;
18+
import com.wordnik.swagger.models.properties.DecimalProperty;
19+
import com.wordnik.swagger.models.properties.DoubleProperty;
20+
import com.wordnik.swagger.models.properties.FileProperty;
21+
import com.wordnik.swagger.models.properties.FloatProperty;
22+
import com.wordnik.swagger.models.properties.IntegerProperty;
23+
import com.wordnik.swagger.models.properties.LongProperty;
24+
import com.wordnik.swagger.models.properties.MapProperty;
25+
import com.wordnik.swagger.models.properties.ObjectProperty;
26+
import com.wordnik.swagger.models.properties.Property;
27+
import com.wordnik.swagger.models.properties.RefProperty;
28+
import com.wordnik.swagger.models.properties.StringProperty;
29+
import com.wordnik.swagger.models.properties.UUIDProperty;
30+
import com.wordnik.swagger.util.Json;
1731

1832
public class ExampleGenerator {
1933
protected Map<String, Model> examples;
@@ -37,28 +51,24 @@ public List<Map<String, String>> generate(Map<String, Object> examples, List<Str
3751
String example = Json.pretty(resolvePropertyToExample(mediaType, property, processedModels));
3852

3953
if(example != null) {
40-
example = example.replaceAll("\n", "\\\\n");
4154
kv.put("example", example);
4255
output.add(kv);
4356
}
4457
}
4558
else if(property != null && mediaType.startsWith("application/xml")) {
4659
String example = new XmlExampleGenerator(this.examples).toXml(property);
4760
if(example != null) {
48-
example = example.replaceAll("\n", "\\\\n");
4961
kv.put("example", example);
5062
output.add(kv);
5163
}
5264
}
5365
}
5466
}
5567
else {
56-
for(String key: examples.keySet()) {
57-
String value = String.valueOf(examples.get(key));
58-
59-
Map<String, String> kv = new HashMap<String, String>();
60-
kv.put("contentType", key);
61-
kv.put("example", value);
68+
for(Map.Entry<String, Object> entry: examples.entrySet()) {
69+
final Map<String, String> kv = new HashMap<String, String>();
70+
kv.put("contentType", entry.getKey());
71+
kv.put("example", Json.pretty(entry.getValue()));
6272
output.add(kv);
6373
}
6474
}

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package com.wordnik.swagger.codegen.languages;
22

3-
import com.wordnik.swagger.codegen.*;
4-
import com.wordnik.swagger.util.Json;
5-
import com.wordnik.swagger.models.properties.*;
6-
7-
import java.util.*;
83
import java.io.File;
4+
import java.util.Arrays;
5+
import java.util.HashSet;
6+
import java.util.Iterator;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
import com.wordnik.swagger.codegen.CodegenConfig;
11+
import com.wordnik.swagger.codegen.CodegenOperation;
12+
import com.wordnik.swagger.codegen.CodegenParameter;
13+
import com.wordnik.swagger.codegen.CodegenResponse;
14+
import com.wordnik.swagger.codegen.CodegenType;
15+
import com.wordnik.swagger.codegen.DefaultCodegen;
16+
import com.wordnik.swagger.codegen.SupportingFile;
917

1018
public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig {
1119
protected String apiVersion = "1.0.0";
@@ -156,8 +164,10 @@ public String apiFileFolder() {
156164

157165
@Override
158166
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
159-
Map<String, Object> objectMap = (Map<String, Object>)objs.get("operations");
160-
List<CodegenOperation> operations = (List<CodegenOperation>)objectMap.get("operation");
167+
@SuppressWarnings("unchecked")
168+
Map<String, Object> objectMap = (Map<String, Object>) objs.get("operations");
169+
@SuppressWarnings("unchecked")
170+
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
161171
for(CodegenOperation operation : operations) {
162172
operation.httpMethod = operation.httpMethod.toLowerCase();
163173
List<CodegenParameter> params = operation.allParams;
@@ -170,20 +180,14 @@ public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
170180
resp.code = "default";
171181
}
172182
}
173-
if(operation.examples != null && operation.examples.size() > 0) {
174-
List<Map<String, String>> examples = operation.examples;
175-
for(int i = examples.size() - 1; i >= 0; i--) {
176-
Map<String, String> example = examples.get(i);
177-
String contentType = example.get("contentType");
178-
if(contentType != null && contentType.indexOf("application/json") == 0) {
179-
String jsonExample = example.get("example");
180-
if(jsonExample != null) {
181-
jsonExample = jsonExample.replaceAll("\\\\n", "\n");
182-
example.put("example", jsonExample);
183-
}
183+
if(operation.examples != null && !operation.examples.isEmpty()) {
184+
// Leave application/json* items only
185+
for (Iterator<Map<String, String>> it = operation.examples.iterator(); it.hasNext();) {
186+
final Map<String, String> example = it.next();
187+
final String contentType = example.get("contentType");
188+
if (contentType == null || !contentType.startsWith("application/json")) {
189+
it.remove();
184190
}
185-
else
186-
examples.remove(i);
187191
}
188192
}
189193
}

modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
{{#examples}}
3636
<h3 class="field-label">Example data</h3>
3737
<div class="example-data-content-type">Content-Type: {{{contentType}}}</div>
38-
<pre class="example"><code>{{{example}}}</code></pre>
38+
<pre class="example"><code>{{example}}</code></pre>
3939
{{/examples}}
4040
</div> <!-- method -->
4141
<hr>

modules/swagger-codegen/src/test/resources/2_0/petstore.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,18 @@
720720
"description": "successful operation",
721721
"schema": {
722722
"$ref": "#/definitions/User"
723+
},
724+
"examples": {
725+
"application/json": {
726+
"id": 1,
727+
"username": "johnp",
728+
"firstName": "John",
729+
"lastName": "Public",
730+
"email": "[email protected]",
731+
"password": "-secret-",
732+
"phone": "0123456789",
733+
"userStatus": 0
734+
}
723735
}
724736
},
725737
"400": {

modules/swagger-generator/pom.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66
<version>2.1.1-M2-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
9-
<groupId>com.wordnik</groupId>
109
<artifactId>swagger-generator</artifactId>
1110
<packaging>war</packaging>
1211
<name>swagger-generator</name>
13-
<version>2.1.1-M2-SNAPSHOT</version>
1412
<build>
1513
<sourceDirectory>src/main/java</sourceDirectory>
1614
<resources>

0 commit comments

Comments
 (0)