From c2f399efcc702544852dce2b52431c722170ff3b Mon Sep 17 00:00:00 2001 From: dmitry ivanov Date: Wed, 20 Jul 2016 22:50:10 +0300 Subject: [PATCH 1/6] fix code-style according to java7 --- .../codegen/examples/ExampleGenerator.java | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index 5c373607d53..bc2cc7b7475 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -21,13 +21,7 @@ import io.swagger.util.Json; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; public class ExampleGenerator { protected Map examples; @@ -37,15 +31,15 @@ public ExampleGenerator(Map examples) { } public List> generate(Map examples, List mediaTypes, Property property) { - List> output = new ArrayList>(); - Set processedModels = new HashSet(); + List> output = new ArrayList<>(); + Set processedModels = new HashSet<>(); if (examples == null) { if (mediaTypes == null) { // assume application/json for this mediaTypes = Arrays.asList("application/json"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. } for (String mediaType : mediaTypes) { - Map kv = new HashMap(); + Map kv = new HashMap<>(); kv.put("contentType", mediaType); if (property != null && mediaType.startsWith("application/json")) { String example = Json.pretty(resolvePropertyToExample(mediaType, property, processedModels)); @@ -64,21 +58,21 @@ public List> generate(Map examples, List entry : examples.entrySet()) { - final Map kv = new HashMap(); + final Map kv = new HashMap<>(); kv.put("contentType", entry.getKey()); kv.put("example", Json.pretty(entry.getValue())); output.add(kv); } } if (output.size() == 0) { - Map kv = new HashMap(); + Map kv = new HashMap<>(); kv.put("output", "none"); output.add(kv); } return output; } - protected Object resolvePropertyToExample(String mediaType, Property property, Set processedModels) { + private Object resolvePropertyToExample(String mediaType, Property property, Set processedModels) { if (property.getExample() != null) { return property.getExample(); } else if (property instanceof StringProperty) { @@ -99,17 +93,17 @@ protected Object resolvePropertyToExample(String mediaType, Property property, S } else if (property instanceof DecimalProperty) { return new BigDecimal(1.3579); } else if (property instanceof DoubleProperty) { - return new Double(3.149); + return 3.149; } else if (property instanceof FileProperty) { return ""; // TODO } else if (property instanceof FloatProperty) { - return new Float(1.23); + return 1.23f; } else if (property instanceof IntegerProperty) { - return new Integer(123); + return 123; } else if (property instanceof LongProperty) { - return new Long(123456789); + return 123456789L; } else if (property instanceof MapProperty) { - Map mp = new HashMap(); + Map mp = new HashMap<>(); if (property.getName() != null) { mp.put(property.getName(), resolvePropertyToExample(mediaType, ((MapProperty) property).getAdditionalProperties(), processedModels)); @@ -133,14 +127,14 @@ protected Object resolvePropertyToExample(String mediaType, Property property, S return ""; } - public Object resolveModelToExample(String name, String mediaType, Model model, Set processedModels) { + private Object resolveModelToExample(String name, String mediaType, Model model, Set processedModels) { if (processedModels.contains(name)) { return ""; } if (model instanceof ModelImpl) { processedModels.add(name); ModelImpl impl = (ModelImpl) model; - Map values = new HashMap(); + Map values = new HashMap<>(); if (impl.getProperties() != null) { for (String propertyName : impl.getProperties().keySet()) { From 9a27cba36c764707dae9c0920589a6d01d2bc052 Mon Sep 17 00:00:00 2001 From: dmitry ivanov Date: Wed, 20 Jul 2016 22:51:24 +0300 Subject: [PATCH 2/6] fix incorrect float, double example generation --- .../codegen/examples/ExampleGenerator.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index bc2cc7b7475..456650b7d91 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -2,22 +2,7 @@ import io.swagger.models.Model; import io.swagger.models.ModelImpl; -import io.swagger.models.properties.ArrayProperty; -import io.swagger.models.properties.BooleanProperty; -import io.swagger.models.properties.DateProperty; -import io.swagger.models.properties.DateTimeProperty; -import io.swagger.models.properties.DecimalProperty; -import io.swagger.models.properties.DoubleProperty; -import io.swagger.models.properties.FileProperty; -import io.swagger.models.properties.FloatProperty; -import io.swagger.models.properties.IntegerProperty; -import io.swagger.models.properties.LongProperty; -import io.swagger.models.properties.MapProperty; -import io.swagger.models.properties.ObjectProperty; -import io.swagger.models.properties.Property; -import io.swagger.models.properties.RefProperty; -import io.swagger.models.properties.StringProperty; -import io.swagger.models.properties.UUIDProperty; +import io.swagger.models.properties.*; import io.swagger.util.Json; import java.math.BigDecimal; @@ -90,8 +75,6 @@ private Object resolvePropertyToExample(String mediaType, Property property, Set return "2000-01-23T04:56:07.000+00:00"; } else if (property instanceof DateTimeProperty) { return "2000-01-23T04:56:07.000+00:00"; - } else if (property instanceof DecimalProperty) { - return new BigDecimal(1.3579); } else if (property instanceof DoubleProperty) { return 3.149; } else if (property instanceof FileProperty) { @@ -102,6 +85,8 @@ private Object resolvePropertyToExample(String mediaType, Property property, Set return 123; } else if (property instanceof LongProperty) { return 123456789L; + } else if (property instanceof DecimalProperty) { + return new BigDecimal(1.3579); } else if (property instanceof MapProperty) { Map mp = new HashMap<>(); if (property.getName() != null) { From 4141aa58db6fb8d1219c746a256bc802af19e17d Mon Sep 17 00:00:00 2001 From: dmitry ivanov Date: Wed, 20 Jul 2016 22:53:44 +0300 Subject: [PATCH 3/6] fix incorrect generic object example generation --- .../main/java/io/swagger/codegen/examples/ExampleGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index 456650b7d91..bf66bb0b902 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -98,7 +98,7 @@ private Object resolvePropertyToExample(String mediaType, Property property, Set } return mp; } else if (property instanceof ObjectProperty) { - return "{}"; + return Collections.EMPTY_MAP; } else if (property instanceof RefProperty) { String simpleName = ((RefProperty) property).getSimpleRef(); Model model = examples.get(simpleName); From 0651a206f3a88b2ba6227ed002b71a147ea4dc18 Mon Sep 17 00:00:00 2001 From: dmitry ivanov Date: Thu, 21 Jul 2016 16:16:46 +0300 Subject: [PATCH 4/6] composed model example generation --- .../codegen/examples/ExampleGenerator.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index bf66bb0b902..9ab5b75cf8c 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -1,7 +1,9 @@ package io.swagger.codegen.examples; +import io.swagger.models.ComposedModel; import io.swagger.models.Model; import io.swagger.models.ModelImpl; +import io.swagger.models.RefModel; import io.swagger.models.properties.*; import io.swagger.util.Json; @@ -128,6 +130,22 @@ private Object resolveModelToExample(String name, String mediaType, Model model, } } return values; + } else if (model instanceof ComposedModel) { + Map values = new HashMap<>(); + ComposedModel composedModel = (ComposedModel) model; + if (composedModel.getInterfaces() != null) { + for (RefModel refModel : composedModel.getInterfaces()) { + String simpleRef = refModel.getSimpleRef(); + Model ifModel = examples.get(simpleRef); + if (ifModel != null){ + Object example = resolveModelToExample(simpleRef, mediaType, ifModel, processedModels); + if (example instanceof Map){ + values.putAll((Map) example); + } + } + } + } + return values; } return ""; } From e5850945835513ea8b1275c3f60a313a73f340eb Mon Sep 17 00:00:00 2001 From: dmitry ivanov Date: Thu, 21 Jul 2016 18:29:44 +0300 Subject: [PATCH 5/6] missing tests --- .../swagger/codegen/ExampleGeneratorTest.java | 89 ++++++++++++++++--- 1 file changed, 75 insertions(+), 14 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java index d4c22b88aad..9a59849c0ba 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java @@ -1,30 +1,25 @@ package io.swagger.codegen; -import io.swagger.codegen.examples.ExampleGenerator; -import io.swagger.models.Model; -import io.swagger.models.ModelImpl; -import io.swagger.models.Xml; -import io.swagger.models.properties.ArrayProperty; -import io.swagger.models.properties.RefProperty; -import io.swagger.models.properties.StringProperty; - +import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; +import io.swagger.codegen.examples.ExampleGenerator; +import io.swagger.models.*; +import io.swagger.models.properties.*; +import io.swagger.util.Json; import org.testng.Assert; import org.testng.annotations.Test; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; @SuppressWarnings("static-method") public class ExampleGeneratorTest { + private static final String JSON = "application/json"; + private static final String XML = "application/xml"; + @Test(description = "check handling of recursive models") public void recursiveModelsTest() { - final String JSON = "application/json"; - final String XML = "application/xml"; final String nodeType = "Node"; final RefProperty ref = new RefProperty(nodeType); final Model node = new ModelImpl().name(nodeType).property("name", new StringProperty()) @@ -70,4 +65,70 @@ public void recursiveModelsTest() { Assert.assertEqualsNoOrder(types.toArray(new String[types.size()]), expectedTypes.toArray(new String[expectedTypes.size()])); } + + @Test(description = "check primitive types generation") + public void testPrimitiveTypes() throws Exception { + final String nodeType = "Node"; + RefProperty ref = new RefProperty(nodeType); + Model node = new ModelImpl().name(nodeType) + .property("parent", ref) + .property("str", new StringProperty()) + .property("bool", new BooleanProperty()) + .property("dbl", new DoubleProperty()) + .property("float", new FloatProperty()) + .property("int", new IntegerProperty()) + .property("long", new LongProperty()) + .property("obj", new ObjectProperty()); + + ExampleGenerator generator = new ExampleGenerator(ImmutableMap.of(nodeType, node)); + List> generate = generator.generate(null, Collections.singletonList(JSON), ref); + String example = generate.get(0).get("example"); + + Map result = Json.mapper().readValue(example, new TypeReference>() {}); + Assert.assertEquals(result.get("str"), "aeiou"); + Assert.assertEquals(result.get("bool"), Boolean.TRUE); + Assert.assertEquals(result.get("dbl"), 3.149); + Assert.assertEquals(result.get("float"), 1.23); + Assert.assertEquals(result.get("int"), 123); + Assert.assertEquals(result.get("long"), 123456789); + Assert.assertTrue(result.get("obj") instanceof Map); + Assert.assertEquals(((Map)result.get("obj")).size(), 0); + } + + @Test(description = "check composed model generation") + public void testComposedModel() throws Exception { + final String nodeType = "Node"; + RefProperty ref = new RefProperty(nodeType); + RefProperty parent = new RefProperty("parent"); + Model modelOne = new ModelImpl().name("ModelOne") + .property("parent", parent) + .property("str", new StringProperty()) + .property("bool", new BooleanProperty()) + .property("dbl", new DoubleProperty()); + + Model modelTwo = new ModelImpl().name("ModelTwo") + .property("parent", parent) + .property("float", new FloatProperty()) + .property("int", new IntegerProperty()) + .property("long", new LongProperty()) + .property("obj", new ObjectProperty()); + + Model model = new ComposedModel() + .interfaces(Arrays.asList(new RefModel("ModelOne"), new RefModel("ModelTwo"))) + .parent(new RefModel(nodeType)); + + ExampleGenerator generator = new ExampleGenerator(ImmutableMap.of("ModelOne", modelOne, "ModelTwo", modelTwo, nodeType, model)); + List> generate = generator.generate(null, Collections.singletonList(JSON), ref); + String example = generate.get(0).get("example"); + + Map result = Json.mapper().readValue(example, new TypeReference>() {}); + Assert.assertEquals(result.get("str"), "aeiou"); + Assert.assertEquals(result.get("bool"), Boolean.TRUE); + Assert.assertEquals(result.get("dbl"), 3.149); + Assert.assertEquals(result.get("float"), 1.23); + Assert.assertEquals(result.get("int"), 123); + Assert.assertEquals(result.get("long"), 123456789); + Assert.assertTrue(result.get("obj") instanceof Map); + Assert.assertEquals(((Map)result.get("obj")).size(), 0); + } } From 0c3b3b96170909d49e353fb07f67356a81341da3 Mon Sep 17 00:00:00 2001 From: dmitry ivanov Date: Fri, 22 Jul 2016 12:01:37 +0300 Subject: [PATCH 6/6] rollback method modifiers --- .../java/io/swagger/codegen/examples/ExampleGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index 9ab5b75cf8c..20df77cf558 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -59,7 +59,7 @@ public List> generate(Map examples, List processedModels) { + protected Object resolvePropertyToExample(String mediaType, Property property, Set processedModels) { if (property.getExample() != null) { return property.getExample(); } else if (property instanceof StringProperty) { @@ -114,7 +114,7 @@ private Object resolvePropertyToExample(String mediaType, Property property, Set return ""; } - private Object resolveModelToExample(String name, String mediaType, Model model, Set processedModels) { + public Object resolveModelToExample(String name, String mediaType, Model model, Set processedModels) { if (processedModels.contains(name)) { return ""; }