forked from loafle/openapi-generator-original
Merge pull request #1005 from mhardorf/sort-by-inheritance
Sort model objects by inheritance
This commit is contained in:
commit
8f2c99f0af
@ -2,6 +2,8 @@ package io.swagger.codegen;
|
|||||||
|
|
||||||
import com.samskivert.mustache.Mustache;
|
import com.samskivert.mustache.Mustache;
|
||||||
import com.samskivert.mustache.Template;
|
import com.samskivert.mustache.Template;
|
||||||
|
|
||||||
|
import io.swagger.models.ComposedModel;
|
||||||
import io.swagger.models.Contact;
|
import io.swagger.models.Contact;
|
||||||
import io.swagger.models.Info;
|
import io.swagger.models.Info;
|
||||||
import io.swagger.models.License;
|
import io.swagger.models.License;
|
||||||
@ -12,6 +14,7 @@ import io.swagger.models.Swagger;
|
|||||||
import io.swagger.models.auth.OAuth2Definition;
|
import io.swagger.models.auth.OAuth2Definition;
|
||||||
import io.swagger.models.auth.SecuritySchemeDefinition;
|
import io.swagger.models.auth.SecuritySchemeDefinition;
|
||||||
import io.swagger.util.Json;
|
import io.swagger.util.Json;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -21,6 +24,8 @@ import java.io.InputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
@ -119,7 +124,9 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
|
|||||||
// models
|
// models
|
||||||
Map<String, Model> definitions = swagger.getDefinitions();
|
Map<String, Model> definitions = swagger.getDefinitions();
|
||||||
if (definitions != null) {
|
if (definitions != null) {
|
||||||
for (String name : definitions.keySet()) {
|
List<String> sortedModelKeys = sortModelsByInheritance(definitions);
|
||||||
|
|
||||||
|
for (String name : sortedModelKeys) {
|
||||||
Model model = definitions.get(name);
|
Model model = definitions.get(name);
|
||||||
Map<String, Model> modelMap = new HashMap<String, Model>();
|
Map<String, Model> modelMap = new HashMap<String, Model>();
|
||||||
modelMap.put(name, model);
|
modelMap.put(name, model);
|
||||||
@ -326,6 +333,52 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
|
|||||||
operation.put(flagFieldName, true);
|
operation.put(flagFieldName, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<String> sortModelsByInheritance(final Map<String, Model> definitions) {
|
||||||
|
List<String> sortedModelKeys = new ArrayList<String>(definitions.keySet());
|
||||||
|
Comparator<String> cmp = new Comparator<String>() {
|
||||||
|
@Override
|
||||||
|
public int compare(String o1, String o2) {
|
||||||
|
Model model1 = definitions.get(o1);
|
||||||
|
Model model2 = definitions.get(o2);
|
||||||
|
|
||||||
|
int model1InheritanceDepth = getInheritanceDepth(model1);
|
||||||
|
int model2InheritanceDepth = getInheritanceDepth(model2);
|
||||||
|
|
||||||
|
if (model1InheritanceDepth == model2InheritanceDepth) {
|
||||||
|
return 0;
|
||||||
|
} else if (model1InheritanceDepth > model2InheritanceDepth) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getInheritanceDepth(Model model) {
|
||||||
|
int inheritanceDepth = 0;
|
||||||
|
Model parent = getParent(model);
|
||||||
|
|
||||||
|
while (parent != null) {
|
||||||
|
inheritanceDepth++;
|
||||||
|
parent = getParent(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return inheritanceDepth;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Model getParent(Model model) {
|
||||||
|
if (model instanceof ComposedModel) {
|
||||||
|
return definitions.get(((ComposedModel) model).getParent().getReference());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Collections.sort(sortedModelKeys, cmp);
|
||||||
|
|
||||||
|
return sortedModelKeys;
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, List<CodegenOperation>> processPaths(Map<String, Path> paths) {
|
public Map<String, List<CodegenOperation>> processPaths(Map<String, Path> paths) {
|
||||||
Map<String, List<CodegenOperation>> ops = new HashMap<String, List<CodegenOperation>>();
|
Map<String, List<CodegenOperation>> ops = new HashMap<String, List<CodegenOperation>>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user