From c5c17123744891fdac673ee37e05b4a310938e6c Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 17 Dec 2015 15:44:22 +0800 Subject: [PATCH 1/7] fix array of inline model body parameter --- .../io/swagger/codegen/InlineModelResolver.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index f727560210a..8235797d8e7 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -13,9 +13,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class InlineModelResolver { private Swagger swagger = null; private boolean skipMatches = false; + static Logger LOGGER = LoggerFactory.getLogger(InlineModelResolver.class); Map addedModels = new HashMap(); Map generatedSignature = new HashMap(); @@ -60,8 +64,19 @@ public class InlineModelResolver { Property inner = am.getItems(); if(inner instanceof ObjectProperty) { + String modelName = uniqueName(bp.getName()); ObjectProperty op = (ObjectProperty) inner; flattenProperties(op.getProperties(), pathname); + + Model inner_model = modelFromProperty(op, modelName); + String existing = matchGenerated(inner_model); + if (existing != null) { + am.setItems(new RefProperty(existing)); + } else { + am.setItems(new RefProperty(modelName)); + addGenerated(modelName, inner_model); + swagger.addDefinition(modelName, inner_model); + } } } } @@ -222,6 +237,7 @@ public class InlineModelResolver { addGenerated(modelName, model); swagger.addDefinition(modelName, model); } + } else { } } if (propsToUpdate.size() > 0) { From c8a10aee338da551892aba9c6fed6262fc7283cb Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 17 Dec 2015 16:44:35 +0800 Subject: [PATCH 2/7] add support for inline array model defined in inline model --- .../swagger/codegen/InlineModelResolver.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 8235797d8e7..a52cc2125db 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -157,6 +157,7 @@ public class InlineModelResolver { flattenProperties(properties, modelName); } else if (model instanceof ArrayModel) { + LOGGER.info("arry model of " + modelName); ArrayModel m = (ArrayModel) model; Property inner = m.getItems(); if (inner instanceof ObjectProperty) { @@ -223,6 +224,7 @@ public class InlineModelResolver { Property property = properties.get(key); if (property instanceof ObjectProperty && ((ObjectProperty)property).getProperties().size() > 0) { String modelName = uniqueName(path + "_" + key); + LOGGER.info("flattening: " + modelName); ObjectProperty op = (ObjectProperty) property; Model model = modelFromProperty(op, modelName); @@ -237,7 +239,31 @@ public class InlineModelResolver { addGenerated(modelName, model); swagger.addDefinition(modelName, model); } + } else if (property instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) property; + Property inner = ap.getItems(); + + if (inner instanceof ObjectProperty) { + String modelName = uniqueName(path + "_" + key); + LOGGER.info("flattening(array inner): " + modelName); + + ObjectProperty op = (ObjectProperty) inner; + flattenProperties(op.getProperties(), path); + + Model inner_model = modelFromProperty(op, modelName); + String existing = matchGenerated(inner_model); + + if (existing != null) { + ap.setItems(new RefProperty(existing)); + } else { + ap.setItems(new RefProperty(modelName)); + addGenerated(modelName, inner_model); + LOGGER.info("flattening(array inner): " + modelName); + swagger.addDefinition(modelName, inner_model); + } + } } else { + LOGGER.info("not flattening " + key); } } if (propsToUpdate.size() > 0) { From 13b03d92d429bd9f0f41d92d35d9259d910dd7e1 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 17 Dec 2015 17:01:14 +0800 Subject: [PATCH 3/7] update response to support array of inline model --- .../swagger/codegen/InlineModelResolver.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index a52cc2125db..62ce6eec8fd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -103,11 +103,23 @@ public class InlineModelResolver { } } else if (property instanceof ArrayProperty) { ArrayProperty ap = (ArrayProperty) property; - if(ap.getItems() instanceof ObjectProperty) { - ObjectProperty op = (ObjectProperty) ap.getItems(); - Map props = op.getProperties(); - flattenProperties(props, "path"); - } + Property inner = ap.getItems(); + + if(inner instanceof ObjectProperty) { + String modelName = uniqueName("inline_response_" + key); + ObjectProperty op = (ObjectProperty) inner; + flattenProperties(op.getProperties(), pathname); + + Model inner_model = modelFromProperty(op, modelName); + String existing = matchGenerated(inner_model); + if (existing != null) { + ap.setItems(new RefProperty(existing)); + } else { + ap.setItems(new RefProperty(modelName)); + addGenerated(modelName, inner_model); + swagger.addDefinition(modelName, inner_model); + } + } } else if (property instanceof MapProperty) { MapProperty op = (MapProperty) property; @@ -367,4 +379,5 @@ public class InlineModelResolver { public void setSkipMatches(boolean skipMatches) { this.skipMatches = skipMatches; } + } From 2e143ec054978a3b882837d759e4a6df6c05b3c2 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 17 Dec 2015 17:39:55 +0800 Subject: [PATCH 4/7] fix map of inline response --- .../swagger/codegen/InlineModelResolver.java | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 62ce6eec8fd..2b407c4b1c9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -110,41 +110,31 @@ public class InlineModelResolver { ObjectProperty op = (ObjectProperty) inner; flattenProperties(op.getProperties(), pathname); - Model inner_model = modelFromProperty(op, modelName); - String existing = matchGenerated(inner_model); + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); if (existing != null) { ap.setItems(new RefProperty(existing)); } else { ap.setItems(new RefProperty(modelName)); - addGenerated(modelName, inner_model); - swagger.addDefinition(modelName, inner_model); + addGenerated(modelName, innerModel); + swagger.addDefinition(modelName, innerModel); } } } else if (property instanceof MapProperty) { - MapProperty op = (MapProperty) property; + MapProperty mp = (MapProperty) property; - Property innerProperty = op.getAdditionalProperties(); + Property innerProperty = mp.getAdditionalProperties(); if(innerProperty instanceof ObjectProperty) { - ModelImpl innerModel = new ModelImpl(); - // TODO: model props - innerModel.setTitle(property.getTitle()); - property.getVendorExtensions(); - property.getRequired(); - property.getReadOnly(); - property.getAccess(); - innerModel.setDescription(property.getDescription()); - innerModel.setExample(property.getExample()); - innerModel.setName(property.getName()); - innerModel.setXml(property.getXml()); - - innerModel.setAdditionalProperties(innerProperty); - String modelName = uniqueName("inline_response_" + key); - String existing = matchGenerated(innerModel); + ObjectProperty op = (ObjectProperty) innerProperty; + flattenProperties(op.getProperties(), pathname); + + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); if (existing != null) { - response.setSchema(new RefProperty(existing)); + mp.setAdditionalProperties(new RefProperty(existing)); } else { - response.setSchema(new RefProperty(modelName)); + mp.setAdditionalProperties(new RefProperty(modelName)); addGenerated(modelName, innerModel); swagger.addDefinition(modelName, innerModel); } From c8c047a2bccfa6651d96d9e3cae400c4467f5fb7 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 17 Dec 2015 17:55:47 +0800 Subject: [PATCH 5/7] fix map in inline model --- .../swagger/codegen/InlineModelResolver.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 2b407c4b1c9..4b79ded2651 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -68,14 +68,14 @@ public class InlineModelResolver { ObjectProperty op = (ObjectProperty) inner; flattenProperties(op.getProperties(), pathname); - Model inner_model = modelFromProperty(op, modelName); - String existing = matchGenerated(inner_model); + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); if (existing != null) { am.setItems(new RefProperty(existing)); } else { am.setItems(new RefProperty(modelName)); - addGenerated(modelName, inner_model); - swagger.addDefinition(modelName, inner_model); + addGenerated(modelName, innerModel); + swagger.addDefinition(modelName, innerModel); } } } @@ -252,18 +252,42 @@ public class InlineModelResolver { ObjectProperty op = (ObjectProperty) inner; flattenProperties(op.getProperties(), path); - Model inner_model = modelFromProperty(op, modelName); - String existing = matchGenerated(inner_model); + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); if (existing != null) { ap.setItems(new RefProperty(existing)); } else { ap.setItems(new RefProperty(modelName)); - addGenerated(modelName, inner_model); + addGenerated(modelName, innerModel); LOGGER.info("flattening(array inner): " + modelName); - swagger.addDefinition(modelName, inner_model); + swagger.addDefinition(modelName, innerModel); } } + } else if (property instanceof MapProperty) { + MapProperty mp = (MapProperty) property; + Property inner = mp.getAdditionalProperties(); + + if (inner instanceof ObjectProperty) { + String modelName = uniqueName(path + "_" + key); + LOGGER.info("flattening(map inner): " + modelName); + + ObjectProperty op = (ObjectProperty) inner; + flattenProperties(op.getProperties(), path); + + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); + + if (existing != null) { + mp.setAdditionalProperties(new RefProperty(existing)); + } else { + mp.setAdditionalProperties(new RefProperty(modelName)); + addGenerated(modelName, innerModel); + LOGGER.info("flattening(array inner): " + modelName); + swagger.addDefinition(modelName, innerModel); + } + } + } else { LOGGER.info("not flattening " + key); } From 03e3a2d0ddaff17b78a78c6f552cb8d9265df686 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 17 Dec 2015 18:05:39 +0800 Subject: [PATCH 6/7] remove logger, replace tab with space --- .../swagger/codegen/InlineModelResolver.java | 72 +++++++++---------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 4b79ded2651..6471a0688a8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -106,20 +106,20 @@ public class InlineModelResolver { Property inner = ap.getItems(); if(inner instanceof ObjectProperty) { - String modelName = uniqueName("inline_response_" + key); - ObjectProperty op = (ObjectProperty) inner; - flattenProperties(op.getProperties(), pathname); + String modelName = uniqueName("inline_response_" + key); + ObjectProperty op = (ObjectProperty) inner; + flattenProperties(op.getProperties(), pathname); - Model innerModel = modelFromProperty(op, modelName); - String existing = matchGenerated(innerModel); - if (existing != null) { - ap.setItems(new RefProperty(existing)); - } else { - ap.setItems(new RefProperty(modelName)); - addGenerated(modelName, innerModel); - swagger.addDefinition(modelName, innerModel); - } - } + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); + if (existing != null) { + ap.setItems(new RefProperty(existing)); + } else { + ap.setItems(new RefProperty(modelName)); + addGenerated(modelName, innerModel); + swagger.addDefinition(modelName, innerModel); + } + } } else if (property instanceof MapProperty) { MapProperty mp = (MapProperty) property; @@ -127,10 +127,10 @@ public class InlineModelResolver { if(innerProperty instanceof ObjectProperty) { String modelName = uniqueName("inline_response_" + key); ObjectProperty op = (ObjectProperty) innerProperty; - flattenProperties(op.getProperties(), pathname); + flattenProperties(op.getProperties(), pathname); - Model innerModel = modelFromProperty(op, modelName); - String existing = matchGenerated(innerModel); + Model innerModel = modelFromProperty(op, modelName); + String existing = matchGenerated(innerModel); if (existing != null) { mp.setAdditionalProperties(new RefProperty(existing)); } else { @@ -159,7 +159,6 @@ public class InlineModelResolver { flattenProperties(properties, modelName); } else if (model instanceof ArrayModel) { - LOGGER.info("arry model of " + modelName); ArrayModel m = (ArrayModel) model; Property inner = m.getItems(); if (inner instanceof ObjectProperty) { @@ -226,7 +225,6 @@ public class InlineModelResolver { Property property = properties.get(key); if (property instanceof ObjectProperty && ((ObjectProperty)property).getProperties().size() > 0) { String modelName = uniqueName(path + "_" + key); - LOGGER.info("flattening: " + modelName); ObjectProperty op = (ObjectProperty) property; Model model = modelFromProperty(op, modelName); @@ -247,22 +245,20 @@ public class InlineModelResolver { if (inner instanceof ObjectProperty) { String modelName = uniqueName(path + "_" + key); - LOGGER.info("flattening(array inner): " + modelName); ObjectProperty op = (ObjectProperty) inner; - flattenProperties(op.getProperties(), path); + flattenProperties(op.getProperties(), path); Model innerModel = modelFromProperty(op, modelName); String existing = matchGenerated(innerModel); - if (existing != null) { - ap.setItems(new RefProperty(existing)); - } else { - ap.setItems(new RefProperty(modelName)); - addGenerated(modelName, innerModel); - LOGGER.info("flattening(array inner): " + modelName); - swagger.addDefinition(modelName, innerModel); - } + if (existing != null) { + ap.setItems(new RefProperty(existing)); + } else { + ap.setItems(new RefProperty(modelName)); + addGenerated(modelName, innerModel); + swagger.addDefinition(modelName, innerModel); + } } } else if (property instanceof MapProperty) { MapProperty mp = (MapProperty) property; @@ -270,26 +266,22 @@ public class InlineModelResolver { if (inner instanceof ObjectProperty) { String modelName = uniqueName(path + "_" + key); - LOGGER.info("flattening(map inner): " + modelName); ObjectProperty op = (ObjectProperty) inner; - flattenProperties(op.getProperties(), path); + flattenProperties(op.getProperties(), path); Model innerModel = modelFromProperty(op, modelName); String existing = matchGenerated(innerModel); - if (existing != null) { - mp.setAdditionalProperties(new RefProperty(existing)); - } else { - mp.setAdditionalProperties(new RefProperty(modelName)); - addGenerated(modelName, innerModel); - LOGGER.info("flattening(array inner): " + modelName); - swagger.addDefinition(modelName, innerModel); - } + if (existing != null) { + mp.setAdditionalProperties(new RefProperty(existing)); + } else { + mp.setAdditionalProperties(new RefProperty(modelName)); + addGenerated(modelName, innerModel); + swagger.addDefinition(modelName, innerModel); + } } - } else { - LOGGER.info("not flattening " + key); } } if (propsToUpdate.size() > 0) { From c1dda0ca1768528c98ce3299888b60c1a09b1050 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 18 Dec 2015 16:50:55 +0800 Subject: [PATCH 7/7] update test case for inline model --- .../codegen/InlineModelResolverTest.java | 70 +++++++++++++------ 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index 68d64562eba..f972711138b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -73,6 +73,7 @@ public class InlineModelResolverTest { ModelImpl model = (ModelImpl)swagger.getDefinitions().get("inline_response_200"); assertTrue(model.getProperties().size() == 1); assertNotNull(model.getProperties().get("name")); + assertTrue(model.getProperties().get("name") instanceof StringProperty); } @Test @@ -174,13 +175,30 @@ public class InlineModelResolverTest { ArrayModel am = (ArrayModel) schema; Property inner = am.getItems(); + assertTrue(inner instanceof RefProperty); - ObjectProperty op = (ObjectProperty) inner; - Property name = op.getProperties().get("address"); - assertTrue(name instanceof RefProperty); + RefProperty rp = (RefProperty) inner; + + assertEquals(rp.getType(), "ref"); + assertEquals(rp.get$ref(), "#/definitions/body"); + assertEquals(rp.getSimpleRef(), "body"); - Model model = swagger.getDefinitions().get("hello_address"); - assertNotNull(model); + Model inline = swagger.getDefinitions().get("body"); + assertNotNull(inline); + assertTrue(inline instanceof ModelImpl); + ModelImpl impl = (ModelImpl) inline; + RefProperty rpAddress = (RefProperty) impl.getProperties().get("address"); + assertNotNull(rpAddress); + assertEquals(rpAddress.getType(), "ref"); + assertEquals(rpAddress.get$ref(), "#/definitions/hello_address"); + assertEquals(rpAddress.getSimpleRef(), "hello_address"); + + Model inlineProp = swagger.getDefinitions().get("hello_address"); + assertNotNull(inlineProp); + assertTrue(inlineProp instanceof ModelImpl); + ModelImpl implProp = (ModelImpl) inlineProp; + assertNotNull(implProp.getProperties().get("street")); + assertTrue(implProp.getProperties().get("street") instanceof StringProperty); } @Test @@ -213,9 +231,17 @@ public class InlineModelResolverTest { assertNotNull(p); - ObjectProperty innerModel = (ObjectProperty) p; - assertTrue(innerModel.getProperties().size() == 1); - assertNotNull(innerModel.getProperties().get("name")); + RefProperty rp = (RefProperty) p; + assertEquals(rp.getType(), "ref"); + assertEquals(rp.get$ref(), "#/definitions/inline_response_200"); + assertEquals(rp.getSimpleRef(), "inline_response_200"); + + Model inline = swagger.getDefinitions().get("inline_response_200"); + assertNotNull(inline); + assertTrue(inline instanceof ModelImpl); + ModelImpl impl = (ModelImpl) inline; + assertNotNull(impl.getProperties().get("name")); + assertTrue(impl.getProperties().get("name") instanceof StringProperty); } @Test @@ -258,20 +284,15 @@ public class InlineModelResolverTest { new InlineModelResolver().flatten(swagger); Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200"); - Property property = response.getSchema(); - assertTrue(property instanceof RefProperty); + assertTrue(property instanceof MapProperty); + assertTrue(swagger.getDefinitions().size() == 1); Model inline = swagger.getDefinitions().get("inline_response_200"); assertTrue(inline instanceof ModelImpl); ModelImpl impl = (ModelImpl) inline; - - Property innerProperty = impl.getAdditionalProperties(); - assertTrue(innerProperty instanceof ObjectProperty); - - ObjectProperty obj = (ObjectProperty) innerProperty; - Property name = obj.getProperties().get("name"); - assertTrue(name instanceof StringProperty); + assertNotNull(impl.getProperties().get("name")); + assertTrue(impl.getProperties().get("name") instanceof StringProperty); } @Test @@ -295,10 +316,17 @@ public class InlineModelResolverTest { ArrayProperty am = (ArrayProperty) response.getSchema(); Property items = am.getItems(); - assertTrue(items instanceof ObjectProperty); - ObjectProperty op = (ObjectProperty) items; - Property name = op.getProperties().get("name"); - assertTrue(name instanceof StringProperty); + assertTrue(items instanceof RefProperty); + RefProperty rp = (RefProperty) items; + assertEquals(rp.getType(), "ref"); + assertEquals(rp.get$ref(), "#/definitions/inline_response_200"); + assertEquals(rp.getSimpleRef(), "inline_response_200"); + + Model inline = swagger.getDefinitions().get("inline_response_200"); + assertTrue(inline instanceof ModelImpl); + ModelImpl impl = (ModelImpl) inline; + assertNotNull(impl.getProperties().get("name")); + assertTrue(impl.getProperties().get("name") instanceof StringProperty); } @Test