diff --git a/src/main/java/com/wordnik/swagger/codegen/Codegen.java b/src/main/java/com/wordnik/swagger/codegen/Codegen.java index 9fdc52a749c..96872fb2efe 100644 --- a/src/main/java/com/wordnik/swagger/codegen/Codegen.java +++ b/src/main/java/com/wordnik/swagger/codegen/Codegen.java @@ -42,7 +42,6 @@ public class Codegen extends DefaultGenerator { usage(options); return; } - try{ codegenInput .opts(clientArgs) diff --git a/src/main/java/com/wordnik/swagger/codegen/CodegenModel.java b/src/main/java/com/wordnik/swagger/codegen/CodegenModel.java index b774ea5450e..4cd6c74dd9e 100644 --- a/src/main/java/com/wordnik/swagger/codegen/CodegenModel.java +++ b/src/main/java/com/wordnik/swagger/codegen/CodegenModel.java @@ -6,6 +6,7 @@ import com.wordnik.swagger.models.properties.*; import java.util.*; class CodegenModel { + public String parent; public String name, classname, description; public String defaultValue; public List vars = new ArrayList(); diff --git a/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java b/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java index e1ff535362f..ecc2008c5be 100644 --- a/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java +++ b/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java @@ -7,7 +7,7 @@ import java.util.*; public class CodegenProperty { public String baseName, complexType, getter, setter, description, datatype, - name, min, max, defaultValue, baseType; + name, min, max, defaultValue, baseType, containerType; public Double minimum, maximum, exclusiveMinimum, exclusiveMaximum; public Boolean hasMore = null, required = null, secondaryParam = null; public Boolean isPrimitiveType, isContainer, isNotContainer; diff --git a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index 329ffb9d941..0f867e91149 100644 --- a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -12,6 +12,7 @@ public class DefaultCodegen { protected String outputFolder = ""; protected Set defaultIncludes = new HashSet(); protected Map typeMapping = new HashMap(); + protected Map instantiationTypes = new HashMap(); protected Set reservedWords = new HashSet(); protected Set languageSpecificPrimitives = new HashSet(); protected Map importMapping = new HashMap(); @@ -153,7 +154,6 @@ public class DefaultCodegen { ); typeMapping = new HashMap(); - typeMapping.put("Array", "List"); typeMapping.put("array", "List"); typeMapping.put("List", "List"); typeMapping.put("boolean", "Boolean"); @@ -169,6 +169,9 @@ public class DefaultCodegen { typeMapping.put("object", "Object"); typeMapping.put("integer", "Integer"); + instantiationTypes = new HashMap(); + instantiationTypes.put("array", "ArrayList"); + reservedWords = new HashSet ( Arrays.asList( "abstract", "continue", "for", "new", "switch", "assert", @@ -196,6 +199,21 @@ public class DefaultCodegen { importMapping.put("LocalTime", "org.joda.time.*"); } + public String toInstantiationType(Property p) { + if (p instanceof MapProperty) { + MapProperty ap = (MapProperty) p; + String inner = getSwaggerType(ap.getAdditionalProperties()); + return "HashMap"; + } + else if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + String inner = getSwaggerType(ap.getItems()); + return "ArrayList<" + inner + ">"; + } + else + return null; + } + public String toDefaultValue(Property p) { if(p instanceof StringProperty) return "null"; @@ -290,16 +308,24 @@ public class DefaultCodegen { m.name = name; m.description = model.getDescription(); m.classname = toModelName(name); - int count = 0; if(model instanceof ArrayModel) { ArrayModel am = (ArrayModel) model; ArrayProperty arrayProperty = new ArrayProperty(am.getItems()); CodegenProperty cp = fromProperty(name, arrayProperty); - m.vars.add(cp); + // m.vars.add(cp); + if(cp.complexType != null && !defaultIncludes.contains(cp.complexType)) + m.imports.add(cp.complexType); + m.parent = cp.baseType; + String containerType = cp.containerType; + if(typeMapping.containsKey(containerType)) { + containerType = typeMapping.get(containerType); + cp.containerType = containerType; + m.imports.add(containerType); + } } else if (model instanceof RefModel) { - + // TODO } else { ModelImpl impl = (ModelImpl) model; @@ -389,9 +415,11 @@ public class DefaultCodegen { if(p instanceof ArrayProperty) { property.isContainer = true; + property.containerType = "array"; ArrayProperty ap = (ArrayProperty) p; CodegenProperty cp = fromProperty("inner", ap.getItems()); - property.baseType = cp.baseType; + + property.baseType = toInstantiationType(p); if(!languageSpecificPrimitives.contains(cp.baseType)) property.complexType = cp.baseType; } @@ -409,7 +437,8 @@ public class DefaultCodegen { String operationId = operation.getOperationId(); if(operationId == null) { - operationId = path.replaceAll("/", "") + "_" + httpMethod; + path = path.replaceAll("\\{", ""); + path = path.replaceAll("\\}", ""); String[] parts = (path + "/" + httpMethod).split("/"); StringBuilder builder = new StringBuilder(); for(int i = 0; i < parts.length; i++) { @@ -596,7 +625,6 @@ public class DefaultCodegen { name = getTypeDeclaration(name); } p.dataType = name; - } } p.paramName = toParamName(bp.getName()); diff --git a/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java b/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java index 04b8ea80241..8c08ad288ef 100644 --- a/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java +++ b/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java @@ -247,13 +247,11 @@ public class DefaultGenerator implements Generator { Set allImports = new HashSet(); for(String key: definitions.keySet()) { Model mm = definitions.get(key); - if(mm instanceof ModelImpl) { - CodegenModel cm = config.fromModel(key, (ModelImpl) mm); - Map mo = new HashMap(); - mo.put("model", cm); - models.add(mo); - allImports.addAll(cm.imports); - } + CodegenModel cm = config.fromModel(key, mm); + Map mo = new HashMap(); + mo.put("model", cm); + models.add(mo); + allImports.addAll(cm.imports); } objs.put("models", models); diff --git a/src/main/resources/JavaJaxRS/model.mustache b/src/main/resources/JavaJaxRS/model.mustache index 938daf4d5f6..49406020a0b 100644 --- a/src/main/resources/JavaJaxRS/model.mustache +++ b/src/main/resources/JavaJaxRS/model.mustache @@ -8,7 +8,7 @@ package {{package}}; /** * {{description}} **/{{/description}} -public class {{classname}} { {{#vars}} +public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} { {{#vars}} /**{{#description}} * {{{description}}}{{/description}} * required: {{required}}{{#minimum}} @@ -33,6 +33,7 @@ public class {{classname}} { {{#vars}} public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class {{classname}} {\n"); + {{#parent}}sb.append(" " + super.toString()).append("\n");{{/parent}} {{#vars}}sb.append(" {{name}}: ").append({{name}}).append("\n"); {{/vars}}sb.append("}\n"); return sb.toString();