Skip to content

Commit 6d392e5

Browse files
authored
Merge pull request #8975 from swagger-api/swos-45
updated generator endpoints to support all codegen types
2 parents 3ed2fad + cb02ba5 commit 6d392e5

File tree

5 files changed

+369
-32
lines changed

5 files changed

+369
-32
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/CodegenType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public String toValue() {
3131
names.put("client", CLIENT);
3232
names.put("server", SERVER);
3333
names.put("documentation", DOCUMENTATION);
34+
names.put("config", CONFIG);
3435
names.put("other", OTHER);
3536
}
3637
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/service/GenerationRequest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ public class GenerationRequest implements Serializable {
99
private Object spec = null;
1010
private String specURL = null;
1111
private Options options = new Options();
12-
private Type type = Type.CLIENT;
12+
private Type type;
1313
private CodegenVersion codegenVersion = CodegenVersion.V3;
1414

1515
public enum Type {
16-
CLIENT("client"), SERVER("server");
16+
CLIENT("client"), SERVER("server"), DOCUMENTATION("documentation"), CONFIG("config");
1717

1818
private String name;
1919

@@ -24,6 +24,15 @@ public enum Type {
2424
public String getTypeName() {
2525
return name;
2626
}
27+
28+
public static Type fromValue(String name) {
29+
for (Type t: Type.values()) {
30+
if (name.equals(t.name)) {
31+
return t;
32+
}
33+
}
34+
return null;
35+
}
2736
}
2837

2938
public enum CodegenVersion {

modules/swagger-generator/src/main/java/io/swagger/v3/generator/online/GeneratorController.java

Lines changed: 125 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,11 @@
4141
public class GeneratorController {
4242

4343
static Logger LOGGER = LoggerFactory.getLogger(GeneratorController.class);
44-
static List<String> CLIENTS = new ArrayList<>();
45-
static List<String> SERVERS = new ArrayList<>();
46-
static List<String> CLIENTSV2 = new ArrayList<>();
47-
static List<String> SERVERSV2 = new ArrayList<>();
44+
45+
static Map<CodegenType, List<String>> TYPES = new LinkedHashMap<>();
46+
static Map<io.swagger.codegen.CodegenType, List<String>> TYPESV2 = new LinkedHashMap<>();
4847

4948
private static ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory());
50-
private static ObjectMapper jsonMapper = new ObjectMapper();
5149
private static HiddenOptions hiddenOptions;
5250
private static String HIDDEN_OPTIONS_CONFIG_FILE = "hiddenOptions.yaml";
5351
private static String PROP_HIDDEN_OPTIONS_PATH = "HIDDEN_OPTIONS_PATH";
@@ -59,26 +57,45 @@ public class GeneratorController {
5957
final ServiceLoader<CodegenConfig> loader = ServiceLoader.load(CodegenConfig.class);
6058

6159
loader.forEach(config -> {
62-
if ((config.getTag().equals(CodegenType.CLIENT) || config.getTag().equals(CodegenType.DOCUMENTATION)) && !hiddenOptions.isHiddenClientV3(config.getName())) {
63-
CLIENTS.add(config.getName());
64-
} else if (config.getTag().equals(CodegenType.SERVER) && !hiddenOptions.isHiddenServerV3(config.getName())) {
65-
SERVERS.add(config.getName());
60+
boolean isServer = CodegenType.SERVER.equals(config.getTag());
61+
boolean process = false;
62+
if (isServer && !hiddenOptions.isHiddenServerV3(config.getName())) {
63+
process = true;
64+
} else if (!isServer && !hiddenOptions.isHiddenClientV3(config.getName())) {
65+
process = true;
66+
}
67+
if (process) {
68+
List<String> typeLanguages = TYPES.get(config.getTag());
69+
if (typeLanguages == null) {
70+
typeLanguages = new ArrayList<>();
71+
TYPES.put(config.getTag(), typeLanguages);
72+
}
73+
typeLanguages.add(config.getName());
6674
}
6775
});
68-
Collections.sort(CLIENTS, String.CASE_INSENSITIVE_ORDER);
69-
Collections.sort(SERVERS, String.CASE_INSENSITIVE_ORDER);
76+
77+
TYPES.forEach((k, v) -> Collections.sort(v, String.CASE_INSENSITIVE_ORDER));
7078

7179
final ServiceLoader<io.swagger.codegen.CodegenConfig> loaderV2 = ServiceLoader.load(io.swagger.codegen.CodegenConfig.class);
7280

7381
loaderV2.forEach(config -> {
74-
if ((config.getTag().equals(io.swagger.codegen.CodegenType.CLIENT) || config.getTag().equals(io.swagger.codegen.CodegenType.DOCUMENTATION)) && !hiddenOptions.isHiddenClient(config.getName())) {
75-
CLIENTSV2.add(config.getName());
76-
} else if (config.getTag().equals(io.swagger.codegen.CodegenType.SERVER) && !hiddenOptions.isHiddenServer(config.getName())) {
77-
SERVERSV2.add(config.getName());
82+
boolean isServer = io.swagger.codegen.CodegenType.SERVER.equals(config.getTag());
83+
boolean process = false;
84+
if (isServer && !hiddenOptions.isHiddenServer(config.getName())) {
85+
process = true;
86+
} else if (!isServer && !hiddenOptions.isHiddenClient(config.getName())) {
87+
process = true;
88+
}
89+
if (process) {
90+
List<String> typeLanguages = TYPESV2.get(config.getTag());
91+
if (typeLanguages == null) {
92+
typeLanguages = new ArrayList<>();
93+
TYPESV2.put(config.getTag(), typeLanguages);
94+
}
95+
typeLanguages.add(config.getName());
7896
}
7997
});
80-
Collections.sort(CLIENTSV2, String.CASE_INSENSITIVE_ORDER);
81-
Collections.sort(SERVERSV2, String.CASE_INSENSITIVE_ORDER);
98+
TYPESV2.forEach((k, v) -> Collections.sort(v, String.CASE_INSENSITIVE_ORDER));
8299
}
83100

84101

@@ -170,29 +187,88 @@ public static HiddenOptions loadHiddenOptions(String location) {
170187
}
171188
}
172189

173-
public ResponseContext clientLanguages(RequestContext requestContext, String version) {
190+
@Deprecated
191+
public ResponseContext clientLanguages(RequestContext requestContext, String version, Boolean clientOnly) {
192+
List<String> clientAndDoc = new ArrayList<>();
174193
if ("V2".equals(version)) {
194+
clientAndDoc.addAll(TYPESV2.get(io.swagger.codegen.CodegenType.CLIENT));
195+
if (!Boolean.TRUE.equals(clientOnly)) {
196+
clientAndDoc.addAll(TYPESV2.get(io.swagger.codegen.CodegenType.DOCUMENTATION));
197+
}
198+
Collections.sort(clientAndDoc, String.CASE_INSENSITIVE_ORDER);
199+
175200
return new ResponseContext()
176201
.status(Response.Status.OK.getStatusCode())
177-
.entity(CLIENTSV2);
202+
.entity(clientAndDoc);
178203

179204
}
205+
clientAndDoc.addAll(TYPES.get(CodegenType.CLIENT));
206+
if (!Boolean.TRUE.equals(clientOnly)) {
207+
clientAndDoc.addAll(TYPES.get(CodegenType.DOCUMENTATION));
208+
}
209+
Collections.sort(clientAndDoc, String.CASE_INSENSITIVE_ORDER);
210+
180211
return new ResponseContext()
181212
.status(Response.Status.OK.getStatusCode())
182-
.entity(CLIENTS);
213+
.entity(clientAndDoc);
183214

184215
}
185216

217+
@Deprecated
186218
public ResponseContext serverLanguages(RequestContext requestContext, String version) {
187219
if ("V2".equals(version)) {
188220
return new ResponseContext()
189221
.status(Response.Status.OK.getStatusCode())
190-
.entity(SERVERSV2);
222+
.entity(TYPESV2.get(io.swagger.codegen.CodegenType.SERVER));
191223

192224
}
193225
return new ResponseContext()
194226
.status(Response.Status.OK.getStatusCode())
195-
.entity(SERVERS);
227+
.entity(TYPES.get(CodegenType.SERVER));
228+
}
229+
230+
@Deprecated
231+
public ResponseContext documentationLanguages(RequestContext requestContext, String version) {
232+
if ("V2".equals(version)) {
233+
return new ResponseContext()
234+
.status(Response.Status.OK.getStatusCode())
235+
.entity(TYPESV2.get(io.swagger.codegen.CodegenType.DOCUMENTATION));
236+
237+
}
238+
return new ResponseContext()
239+
.status(Response.Status.OK.getStatusCode())
240+
.entity(TYPES.get(CodegenType.DOCUMENTATION));
241+
}
242+
243+
public ResponseContext languages(RequestContext requestContext, String type, String version) {
244+
if ("V2".equals(version)) {
245+
io.swagger.codegen.CodegenType codegenType = io.swagger.codegen.CodegenType.forValue(type);
246+
return new ResponseContext()
247+
.status(Response.Status.OK.getStatusCode())
248+
.entity(TYPESV2.get(codegenType));
249+
250+
}
251+
CodegenType codegenTypeV3 = CodegenType.forValue(type);
252+
return new ResponseContext()
253+
.status(Response.Status.OK.getStatusCode())
254+
.entity(TYPES.get(codegenTypeV3));
255+
}
256+
257+
public ResponseContext languagesMulti(RequestContext requestContext, List<String> types, String version) {
258+
final List<String> languages = new ArrayList<>();
259+
if ("V2".equals(version)) {
260+
types.forEach(s -> languages.addAll(TYPESV2.get(io.swagger.codegen.CodegenType.forValue(s))));
261+
Collections.sort(languages, String.CASE_INSENSITIVE_ORDER);
262+
return new ResponseContext()
263+
.status(Response.Status.OK.getStatusCode())
264+
.entity(languages);
265+
266+
}
267+
types.forEach(s -> languages.addAll(TYPES.get(CodegenType.forValue(s))));
268+
Collections.sort(languages, String.CASE_INSENSITIVE_ORDER);
269+
return new ResponseContext()
270+
.status(Response.Status.OK.getStatusCode())
271+
.entity(languages);
196272
}
197273

198274
public ResponseContext listOptions(RequestContext requestContext, String language, String version) {
@@ -372,6 +448,33 @@ private ResponseContext generate(GenerationRequest generationRequest, File outpu
372448
.entity(msg);
373449
}
374450
if (files.size() > 0) {
451+
if (generationRequest.getType() == null) {
452+
String lang = generationRequest.getLang();
453+
if (GenerationRequest.CodegenVersion.V2.equals(generationRequest.getCodegenVersion())) {
454+
TYPESV2
455+
.entrySet().stream()
456+
.filter(e -> {
457+
return e.getValue().contains(lang);
458+
})
459+
.findFirst()
460+
.ifPresent(e -> {
461+
generationRequest.type(GenerationRequest.Type.fromValue(e.getKey().toValue()));
462+
});
463+
} else {
464+
TYPES
465+
.entrySet().stream()
466+
.filter(e -> {
467+
return e.getValue().contains(lang);
468+
})
469+
.findFirst()
470+
.ifPresent(e -> {
471+
generationRequest.type(GenerationRequest.Type.fromValue(e.getKey().toValue()));
472+
});
473+
}
474+
if (generationRequest.getType() == null) {
475+
generationRequest.type(GenerationRequest.Type.CLIENT);
476+
}
477+
}
375478
return downloadFile(outputRootFolder, outputContentFolder, outputFile, generationRequest.getLang(), generationRequest.getType());
376479
} else {
377480
return new ResponseContext()

0 commit comments

Comments
 (0)