From 3f194d3288c5010d196110493d67d61b8eab7a3e Mon Sep 17 00:00:00 2001 From: Alexey Nechaev Date: Tue, 9 Jun 2015 19:34:09 +0300 Subject: [PATCH] Fixed #837: Generation of default values for complex arrays and maps has been improved. --- .../io/swagger/codegen/DefaultCodegen.java | 8 ----- .../codegen/languages/JavaClientCodegen.java | 12 +++++++ .../src/test/scala/Java/JavaModelTest.scala | 32 +++++++++++++++---- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 71b6295c9be..6ab3fe440ca 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -422,14 +422,6 @@ public class DefaultCodegen { return dp.getDefault().toString(); } return "null"; - } else if (p instanceof MapProperty) { - MapProperty ap = (MapProperty) p; - String inner = getSwaggerType(ap.getAdditionalProperties()); - return "new HashMap() "; - } else if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - String inner = getSwaggerType(ap.getItems()); - return "new ArrayList<" + inner + ">() "; } else { return "null"; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index fcec455e9b3..d7311b840e6 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -200,6 +200,18 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { return super.getTypeDeclaration(p); } + @Override + public String toDefaultValue(Property p) { + if (p instanceof ArrayProperty) { + final ArrayProperty ap = (ArrayProperty) p; + return String.format("new ArrayList<%s>()", getTypeDeclaration(ap.getItems())); + } else if (p instanceof MapProperty) { + final MapProperty ap = (MapProperty) p; + return String.format("new HashMap()", getTypeDeclaration(ap.getAdditionalProperties())); + } + return super.toDefaultValue(p); + } + @Override public String getSwaggerType(Property p) { String swaggerType = super.getSwaggerType(p); diff --git a/modules/swagger-codegen/src/test/scala/Java/JavaModelTest.scala b/modules/swagger-codegen/src/test/scala/Java/JavaModelTest.scala index fc819f1f195..09bc8edf0ab 100644 --- a/modules/swagger-codegen/src/test/scala/Java/JavaModelTest.scala +++ b/modules/swagger-codegen/src/test/scala/Java/JavaModelTest.scala @@ -85,7 +85,7 @@ class JavaModelTest extends FlatSpec with Matchers { vars.get(1).setter should be("setUrls") vars.get(1).datatype should be("List") vars.get(1).name should be("urls") - vars.get(1).defaultValue should be("new ArrayList() ") + vars.get(1).defaultValue should be("new ArrayList()") vars.get(1).baseType should be("List") vars.get(1).containerType should be("array") vars.get(1).required should equal(null) @@ -113,7 +113,7 @@ class JavaModelTest extends FlatSpec with Matchers { vars.get(0).setter should be("setTranslations") vars.get(0).datatype should be("Map") vars.get(0).name should be("translations") - vars.get(0).defaultValue should be("new HashMap() ") + vars.get(0).defaultValue should be("new HashMap()") vars.get(0).baseType should be("Map") vars.get(0).containerType should be("map") vars.get(0).required should equal(null) @@ -121,7 +121,7 @@ class JavaModelTest extends FlatSpec with Matchers { } - ignore should "convert a model with a map with complex list property" in { + it should "convert a model with a map with complex list property" in { val model = new ModelImpl() .description("a sample model") .property("translations", new MapProperty() @@ -144,13 +144,33 @@ class JavaModelTest extends FlatSpec with Matchers { vars.get(0).setter should be("setTranslations") vars.get(0).datatype should be("Map>") vars.get(0).name should be("translations") - vars.get(0).defaultValue should be("new HashMap>() ") + vars.get(0).defaultValue should be("new HashMap>()") vars.get(0).baseType should be("Map") vars.get(0).containerType should be("map") vars.get(0).required should equal(null) vars.get(0).isContainer should equal(true) } + it should "convert a model with a 2D list property" in { + val model = new ModelImpl().name("sample").property("list2D", new ArrayProperty().items( + new ArrayProperty().items(new RefProperty("Pet")))) + val codegen = new JavaClientCodegen() + val cm = codegen.fromModel("sample", model) + val vars = cm.vars + vars.size should be (1) + val list = vars.get(0) + list.baseName should be("list2D") + list.getter should be("getList2D") + list.setter should be("setList2D") + list.datatype should be("List>") + list.name should be("list2D") + list.defaultValue should be ("new ArrayList>()") + list.baseType should be("List") + list.containerType should be("array") + list.required should equal(null) + list.isContainer should equal(true) + } + it should "convert a model with complex properties" in { val model = new ModelImpl() .description("a sample model") @@ -197,7 +217,7 @@ class JavaModelTest extends FlatSpec with Matchers { vars.get(0).setter should be("setChildren") vars.get(0).datatype should be("List") vars.get(0).name should be("children") - vars.get(0).defaultValue should be("new ArrayList() ") + vars.get(0).defaultValue should be("new ArrayList()") vars.get(0).baseType should be("List") vars.get(0).containerType should be("array") vars.get(0).required should equal(null) @@ -226,7 +246,7 @@ class JavaModelTest extends FlatSpec with Matchers { vars.get(0).setter should be("setChildren") vars.get(0).datatype should be("Map") vars.get(0).name should be("children") - vars.get(0).defaultValue should be("new HashMap() ") + vars.get(0).defaultValue should be("new HashMap()") vars.get(0).baseType should be("Map") vars.get(0).containerType should be("map") vars.get(0).required should equal(null)