Skip to content
This repository was archived by the owner on Aug 27, 2021. It is now read-only.

Commit fae711a

Browse files
committed
Merge pull request swagger-api#1 in ~LUKASZ_K/swagger-codegen-zoo from feature/retrofit_client_inheritance_support_2.2.1 to zoo_release
* commit '5863d41f63e956d24cc19048e2f3266be2e4b0fb': refactor to use template move java specific code away from default codegen base case insensitive compare discriminator and type friendly name add dependency for gson-fire in buildfiles gson support for subclasses in server response (retrofit)
2 parents 371a021 + 5863d41 commit fae711a

File tree

8 files changed

+88
-4
lines changed

8 files changed

+88
-4
lines changed

modules/swagger-codegen-maven-plugin/pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
<version>2.2.1</version>
1010
<relativePath>../..</relativePath>
1111
</parent>
12-
<artifactId>swagger-codegen-maven-plugin</artifactId>
12+
<artifactId>swagger-codegen-maven-plugin-zoo</artifactId>
13+
<version>2.2.1.1-SNAPSHOT</version>
1314
<name>swagger-codegen (maven-plugin)</name>
1415
<packaging>maven-plugin</packaging>
1516
<description>maven plugin to build modules from swagger codegen</description>
@@ -45,7 +46,7 @@
4546
</dependency>
4647
<dependency>
4748
<groupId>io.swagger</groupId>
48-
<artifactId>swagger-codegen</artifactId>
49+
<artifactId>swagger-codegen-zoo</artifactId>
4950
<version>${project.version}</version>
5051
</dependency>
5152
<dependency>

modules/swagger-codegen/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>
10-
<artifactId>swagger-codegen</artifactId>
10+
<artifactId>swagger-codegen-zoo</artifactId>
11+
<version>2.2.1.1-SNAPSHOT</version>
1112
<packaging>jar</packaging>
1213
<name>swagger-codegen (core library)</name>
1314
<build>

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ public Reader getTemplate(String name) {
637637
return files;
638638
}
639639

640+
640641
private File processTemplateToFile(Map<String, Object> templateData, String templateName, String outputFilename) throws IOException {
641642
if(ignoreProcessor.allowsFile(new File(outputFilename.replaceAll("//", "/")))) {
642643
String templateFile = getFullTemplateFile(config, templateName);

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.swagger.codegen.languages;
22

3+
import com.google.common.collect.LinkedListMultimap;
34
import io.swagger.codegen.*;
45
import org.apache.commons.lang3.BooleanUtils;
56
import org.apache.commons.lang3.StringUtils;
@@ -191,6 +192,24 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
191192
}
192193
}
193194

195+
@Override
196+
public Map<String, Object> postProcessAllModels(Map<String, Object> objs) {
197+
Map<String, Object> allProcessedModels = super.postProcessAllModels(objs);
198+
if(!additionalProperties.containsKey("gsonFactoryMethod")) {
199+
List<Object> allModels = new ArrayList<Object>();
200+
for (String name: allProcessedModels.keySet()) {
201+
Map<String, Object> models = (Map<String, Object>)allProcessedModels.get(name);
202+
try {
203+
allModels.add(((List<Object>) models.get("models")).get(0));
204+
} catch (Exception e){
205+
e.printStackTrace();
206+
}
207+
}
208+
additionalProperties.put("parent", modelInheritanceSupportInGson(allModels));
209+
}
210+
return allProcessedModels;
211+
}
212+
194213
@Override
195214
public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
196215
objs = super.postProcessModelsEnum(objs);
@@ -217,4 +236,32 @@ public void setUseRxJava(boolean useRxJava) {
217236
this.useRxJava = useRxJava;
218237
}
219238

239+
240+
private List<Map<String, Object>> modelInheritanceSupportInGson(List<?> allModels) {
241+
LinkedListMultimap<CodegenModel, CodegenModel> byParent = LinkedListMultimap.create();
242+
for (Object m : allModels) {
243+
Map entry = (Map) m;
244+
CodegenModel parent = ((CodegenModel)entry.get("model")).parentModel;
245+
if(null!= parent) {
246+
byParent.put(parent, ((CodegenModel)entry.get("model")));
247+
}
248+
}
249+
List<Map<String, Object>> parentsList = new ArrayList<>();
250+
for (CodegenModel parentModel : byParent.keySet()) {
251+
List<Map<String, Object>> childrenList = new ArrayList<>();
252+
Map<String, Object> parent = new HashMap<>();
253+
parent.put("classname", parentModel.classname);
254+
List<CodegenModel> childrenModels = byParent.get(parentModel);
255+
for (CodegenModel model : childrenModels) {
256+
Map<String, Object> child = new HashMap<>();
257+
child.put("name", model.name);
258+
child.put("classname", model.classname);
259+
childrenList.add(child);
260+
}
261+
parent.put("children", childrenList);
262+
parent.put("discriminator", parentModel.discriminator);
263+
parentsList.add(parent);
264+
}
265+
return parentsList;
266+
}
220267
}

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/ApiClient.mustache

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import java.lang.reflect.Type;
66
import java.util.Date;
77
import java.util.LinkedHashMap;
88
import java.util.Map;
9+
import java.util.HashMap;
910

1011
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
1112
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
@@ -32,6 +33,9 @@ import com.google.gson.JsonParseException;
3233
import com.google.gson.TypeAdapter;
3334
import com.google.gson.stream.JsonReader;
3435
import com.google.gson.stream.JsonWriter;
36+
import com.google.gson.JsonElement;
37+
import io.gsonfire.GsonFireBuilder;
38+
import io.gsonfire.TypeSelector;
3539
import okhttp3.Interceptor;
3640
import okhttp3.OkHttpClient;
3741
import okhttp3.RequestBody;
@@ -44,6 +48,7 @@ import {{invokerPackage}}.auth.OAuth;
4448
import {{invokerPackage}}.auth.OAuth.AccessTokenListener;
4549
import {{invokerPackage}}.auth.OAuthFlow;
4650

51+
import {{modelPackage}}.*;
4752

4853
public class ApiClient {
4954
@@ -118,8 +123,28 @@ public class ApiClient {
118123
.setPassword(password);
119124
}
120125

126+
public static GsonBuilder createGson() {
127+
GsonFireBuilder fireBuilder = new GsonFireBuilder()
128+
{{#parent}}
129+
.registerTypeSelector({{classname}}.class, new TypeSelector() {
130+
@Override
131+
public Class getClassForElement(JsonElement readElement) {
132+
Map classByDiscriminatorValue = new HashMap();
133+
{{#children}}
134+
classByDiscriminatorValue.put("{{name}}".toUpperCase(), {{classname}}.class);
135+
{{/children}}
136+
String discriminatorField = "{{discriminator}}";
137+
String discriminatorValue = readElement.getAsJsonObject().get(discriminatorField).getAsString();
138+
return (Class) classByDiscriminatorValue.get(discriminatorValue.toUpperCase());
139+
}
140+
})
141+
{{/parent}}
142+
;
143+
return fireBuilder.createGsonBuilder();
144+
}
145+
121146
public void createDefaultAdapter() {
122-
Gson gson = new GsonBuilder()
147+
Gson gson = createGson()
123148
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
124149
{{^java8}}
125150
.registerTypeAdapter(DateTime.class, new DateTimeTypeAdapter())

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.gradle.mustache

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ ext {
104104
{{^java8}}
105105
jodatime_version = "2.9.3"
106106
{{/java8}}
107+
json_fire_version = "1.8.0"
107108
}
108109

109110
dependencies {
@@ -116,6 +117,7 @@ dependencies {
116117
{{/useRxJava}}
117118
compile "io.swagger:swagger-annotations:$swagger_annotations_version"
118119
compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:$oltu_version"
120+
compile ""io.gsonfire:gson-fire:$json_fire_version"
119121
{{^java8}}
120122
compile "joda-time:joda-time:$jodatime_version"
121123
{{/java8}}

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.sbt.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ lazy val root = (project in file(".")).
1212
"com.squareup.retrofit2" % "retrofit" % "2.0.2" % "compile",
1313
"com.squareup.retrofit2" % "converter-scalars" % "2.0.2" % "compile",
1414
"com.squareup.retrofit2" % "converter-gson" % "2.0.2" % "compile",
15+
"io.gsonfire" % "gson-fire" % "1.8.0" % "compile",
1516
{{#useRxJava}}
1617
"com.squareup.retrofit2" % "adapter-rxjava" % "2.0.2" % "compile",
1718
"io.reactivex" % "rxjava" % "1.1.3" % "compile",

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/pom.mustache

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@
124124
<artifactId>org.apache.oltu.oauth2.client</artifactId>
125125
<version>${oltu-version}</version>
126126
</dependency>
127+
<dependency>
128+
<groupId>io.gsonfire</groupId>
129+
<artifactId>gson-fire</artifactId>
130+
<version>${gson-fire-version}</version>
131+
</dependency>
127132
{{^java8}}
128133
<dependency>
129134
<groupId>joda-time</groupId>
@@ -159,6 +164,7 @@
159164
<maven.compiler.target>${java.version}</maven.compiler.target>
160165
<swagger-core-version>1.5.9</swagger-core-version>
161166
<retrofit-version>2.1.0</retrofit-version>
167+
<gson-fire-version>1.8.0</gson-fire-version>
162168
{{#useRxJava}}
163169
<rxjava-version>1.1.6</rxjava-version>
164170
{{/useRxJava}}

0 commit comments

Comments
 (0)