Skip to content

Commit 29f4107

Browse files
authored
Merge pull request #10004 from swagger-api/composed_schema_objects_generation
refactored composed schema method generation
2 parents ba85a53 + 08c7f44 commit 29f4107

File tree

3 files changed

+67
-22
lines changed

3 files changed

+67
-22
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.swagger.codegen.v3;
2+
3+
import io.swagger.v3.oas.models.media.Schema;
4+
5+
public class CodegenSchema {
6+
7+
private CodegenModel codegenModel;
8+
private Schema schema;
9+
10+
public CodegenSchema(CodegenModel codegenModel, Schema schema) {
11+
this.codegenModel = codegenModel;
12+
this.schema = schema;
13+
}
14+
15+
public CodegenModel getCodegenModel() {
16+
return codegenModel;
17+
}
18+
19+
public Schema getSchema() {
20+
return schema;
21+
}
22+
}

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

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -382,28 +382,25 @@ public int compare(String o1, String o2) {
382382
if (modelList == null || modelList.isEmpty()) {
383383
continue;
384384
}
385-
386-
for (Object object : modelList) {
387-
Map<String, Object> modelMap = (Map<String, Object>) object;
388-
CodegenModel codegenModel = null;
389-
if (modelMap.containsKey("oneOf-model")) {
390-
codegenModel = (CodegenModel) modelMap.get("oneOf-model");
391-
}
392-
if (modelMap.containsKey("anyOf-model")) {
393-
codegenModel = (CodegenModel) modelMap.get("anyOf-model");
394-
}
395-
if (codegenModel != null) {
396-
models = processModel(codegenModel, config, schemas);
397-
models.put("classname", config.toModelName(codegenModel.name));
398-
models.putAll(config.additionalProperties());
399-
allProcessedModels.put(codegenModel.name, models);
400-
break;
401-
}
402-
}
403385
} catch (Exception e) {
404386
throw new RuntimeException("Could not process model '" + name + "'" + ".Please make sure that your schema is correct!", e);
405387
}
406388
}
389+
final List<CodegenModel> composedModels = null;
390+
/** todo: uncomment once generator repo is updated
391+
final ISchemaHandler schemaHandler = config.getSchemaHandler();
392+
schemaHandler.readProcessedModels(allProcessedModels);
393+
394+
final List<CodegenModel> composedModels = schemaHandler.getModels();
395+
*/
396+
if (composedModels != null && !composedModels.isEmpty()) {
397+
for (CodegenModel composedModel : composedModels) {
398+
final Map<String, Object> models = processModel(composedModel, config, schemas);
399+
models.put("classname", config.toModelName(composedModel.name));
400+
models.putAll(config.additionalProperties());
401+
allProcessedModels.put(composedModel.name, models);
402+
}
403+
}
407404

408405
// post process all processed models
409406
allProcessedModels = config.postProcessAllModels(allProcessedModels);
@@ -1015,7 +1012,9 @@ private Map<String, Object> processModels(CodegenConfig config, Map<String, Sche
10151012
CodegenModel cm = config.fromModel(key, schema, allDefinitions);
10161013
Map<String, Object> mo = new HashMap<>();
10171014
mo.put("model", cm);
1015+
mo.put("schema", schema);
10181016
mo.put("importPath", config.toModelImport(cm.classname));
1017+
/**
10191018
if (cm.vendorExtensions.containsKey("oneOf-model")) {
10201019
CodegenModel oneOfModel = (CodegenModel) cm.vendorExtensions.get("oneOf-model");
10211020
mo.put("oneOf-model", oneOfModel);
@@ -1024,6 +1023,7 @@ private Map<String, Object> processModels(CodegenConfig config, Map<String, Sche
10241023
CodegenModel anyOfModel = (CodegenModel) cm.vendorExtensions.get("anyOf-model");
10251024
mo.put("anyOf-model", anyOfModel);
10261025
}
1026+
*/
10271027
models.add(mo);
10281028

10291029
allImports.addAll(cm.imports);
@@ -1060,9 +1060,7 @@ private Map<String, Object> processModel(CodegenModel codegenModel, CodegenConfi
10601060
objs.put("package", config.modelPackage());
10611061
List<Object> models = new ArrayList<>();
10621062

1063-
if (codegenModel.vendorExtensions.containsKey("x-is-composed-model")) {
1064-
objs.put("x-is-composed-model", codegenModel.vendorExtensions.get("x-is-composed-model"));
1065-
}
1063+
objs.put("x-is-composed-model", codegenModel.isComposedModel);
10661064

10671065
Map<String, Object> modelObject = new HashMap<>();
10681066
modelObject.put("model", codegenModel);

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,41 @@
22

33
import io.swagger.v3.oas.models.media.Schema;
44

5+
import java.util.ArrayList;
6+
import java.util.HashMap;
57
import java.util.List;
8+
import java.util.Map;
69

710
public interface ISchemaHandler {
811

12+
default void readProcessedModels(Map<String,Object> allProcessedModels) {
13+
final List<CodegenSchema> codegenSchemas = new ArrayList<>();
14+
final Map<String, CodegenModel> allModels = new HashMap<>();
15+
for (String name : allProcessedModels.keySet()) {
16+
final Map<String, Object> modelMap = (Map<String, Object>) allProcessedModels.get(name);
17+
final List<Map<String, Object>> models = (List<Map<String, Object>>) modelMap.get("models");
18+
for (Map<String, Object> mo : models) {
19+
final CodegenModel codegenModel = (CodegenModel) mo.get("model");
20+
final Schema schema = (Schema) mo.get("schema");
21+
22+
codegenSchemas.add(new CodegenSchema(codegenModel, schema));
23+
allModels.put(codegenModel.classname, codegenModel);
24+
}
25+
}
26+
if (codegenSchemas.isEmpty()) {
27+
return;
28+
}
29+
for (CodegenSchema codegenSchema : codegenSchemas) {
30+
processComposedSchemas(codegenSchema.getCodegenModel(), codegenSchema.getSchema(), allModels);
31+
}
32+
}
33+
934
/**
1035
* check if there is any composed schema in models or properties. And create codegen model objects if it's required.
1136
* @param codegenModel
1237
* @param schema
1338
*/
14-
void proccessComposedSchemas(CodegenModel codegenModel, Schema schema);
39+
void processComposedSchemas(CodegenModel codegenModel, Schema schema, Map<String, CodegenModel> allModels);
1540

1641
/**
1742
* retrieve a list of codegen models created from composed schemas found.

0 commit comments

Comments
 (0)