From 3a9545448cbfe06c89a6d31f626c8e5627eda5e2 Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Wed, 4 Jul 2018 17:37:05 +0200 Subject: [PATCH 1/7] Add DiscriminatorCodegen --- .../codegen/CodegenDiscriminator.java | 56 +++++++++++++++++ .../openapitools/codegen/CodegenModel.java | 9 ++- .../codegen/CodegenOperation.java | 6 +- .../openapitools/codegen/DefaultCodegen.java | 33 +++++++++- .../src/test/resources/3_0/allOf.yaml | 61 +++++++++++++++++++ 5 files changed, 153 insertions(+), 12 deletions(-) create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java create mode 100644 modules/openapi-generator/src/test/resources/3_0/allOf.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java new file mode 100644 index 000000000000..e25b55a5aa3d --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java @@ -0,0 +1,56 @@ +package org.openapitools.codegen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class CodegenDiscriminator { + private String propertyName; + private Map mapping; + private List mappedModels = new ArrayList<>(); + + public String getPropertyName() { + return propertyName; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public Map getMapping() { + return mapping; + } + + public void setMapping(Map mapping) { + this.mapping = mapping; + } + + public List getMappedModels() { + return mappedModels; + } + + public void setMappedModels(List mappedModels) { + this.mappedModels = mappedModels; + } + + public static class MappedModel { + private String mappingName; + private CodegenModel model; + + public String getMappingName() { + return mappingName; + } + + public void setMappingName(String mappingName) { + this.mappingName = mappingName; + } + + public CodegenModel getModel() { + return model; + } + + public void setModel(CodegenModel model) { + this.model = model; + } + } +} diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java index 864028eacb7f..279d796f05fd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java @@ -18,15 +18,14 @@ package org.openapitools.codegen; import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.media.Discriminator; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; -import java.util.Objects; public class CodegenModel { public String parent, parentSchema; @@ -40,7 +39,7 @@ public class CodegenModel { public String name, classname, title, description, classVarName, modelJson, dataType, xmlPrefix, xmlNamespace, xmlName; public String classFilename; // store the class file name, mainly used for import public String unescapedDescription; - public Discriminator discriminator; + public CodegenDiscriminator discriminator; public String defaultValue; public String arrayModelType; public boolean isAlias; // Is this effectively an alias of another simple type @@ -349,7 +348,7 @@ public void setUnescapedDescription(String unescapedDescription) { this.unescapedDescription = unescapedDescription; } - public Discriminator getDiscriminator() { + public CodegenDiscriminator getDiscriminator() { return discriminator; } @@ -357,7 +356,7 @@ public String getDiscriminatorName() { return discriminator == null ? null : discriminator.getPropertyName(); } - public void setDiscriminator(Discriminator discriminator) { + public void setDiscriminator(CodegenDiscriminator discriminator) { this.discriminator = discriminator; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java index 6f29146bde30..0e7e96d1b546 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java @@ -18,17 +18,15 @@ package org.openapitools.codegen; import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.media.Discriminator; -import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.oas.models.tags.Tag; 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.Arrays; public class CodegenOperation { public final List responseHeaders = new ArrayList(); @@ -40,7 +38,7 @@ public class CodegenOperation { isRestful, isDeprecated; public String path, operationId, returnType, httpMethod, returnBaseType, returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse; - public Discriminator discriminator; + public CodegenDiscriminator discriminator; public List> consumes, produces, prioritizedContentTypes; public CodegenParameter bodyParam; public List allParams = new ArrayList(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index eee5950de687..1e832c5700c5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -26,7 +26,12 @@ import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.examples.Example; import io.swagger.v3.oas.models.headers.Header; -import io.swagger.v3.oas.models.media.*; +import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.ComposedSchema; +import io.swagger.v3.oas.models.media.Content; +import io.swagger.v3.oas.models.media.MediaType; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.CookieParameter; import io.swagger.v3.oas.models.parameters.HeaderParameter; import io.swagger.v3.oas.models.parameters.Parameter; @@ -43,6 +48,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; +import org.openapitools.codegen.CodegenDiscriminator.MappedModel; import org.openapitools.codegen.examples.ExampleGenerator; import org.openapitools.codegen.serializer.SerializerUtils; import org.openapitools.codegen.utils.ModelUtils; @@ -1489,7 +1495,7 @@ public CodegenModel fromModel(String name, Schema schema, Map al m.getVendorExtensions().putAll(schema.getExtensions()); } m.isAlias = typeAliases.containsKey(name); - m.discriminator = schema.getDiscriminator(); + m.discriminator = createDiscriminator(schema, allDefinitions); if (schema.getXml() != null) { m.xmlPrefix = schema.getXml().getPrefix(); @@ -1516,7 +1522,7 @@ public CodegenModel fromModel(String name, Schema schema, Map al int modelImplCnt = 0; // only one inline object allowed in a ComposedModel for (Schema innerModel : composed.getAllOf()) { if (m.discriminator == null) { - m.discriminator = schema.getDiscriminator(); + m.discriminator = createDiscriminator(schema, allDefinitions); } if (innerModel.getXml() != null) { m.xmlPrefix = innerModel.getXml().getPrefix(); @@ -1631,6 +1637,27 @@ public CodegenModel fromModel(String name, Schema schema, Map al return m; } + private CodegenDiscriminator createDiscriminator(Schema schema, Map allDefinitions) { + if(schema.getDiscriminator() == null) { + return null; + } + CodegenDiscriminator discriminator = new CodegenDiscriminator(); + discriminator.setPropertyName(schema.getDiscriminator().getPropertyName()); + discriminator.setMapping(schema.getDiscriminator().getMapping()); + if(schema.getDiscriminator().getMapping() != null) { + for (Entry e : schema.getDiscriminator().getMapping().entrySet()) { + String name = ModelUtils.getSimpleRef(e.getValue()); + Schema referencedSchema = allDefinitions.get(name); + CodegenModel model = fromModel(name, referencedSchema, allDefinitions); + MappedModel mappedModel = new MappedModel(); + mappedModel.setMappingName(e.getKey()); + mappedModel.setModel(model); + discriminator.getMappedModels().add(mappedModel); + } + } + return discriminator; + } + protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) { addParentContainer(codegenModel, codegenModel.name, schema); } diff --git a/modules/openapi-generator/src/test/resources/3_0/allOf.yaml b/modules/openapi-generator/src/test/resources/3_0/allOf.yaml new file mode 100644 index 000000000000..3c7baaae8b73 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/allOf.yaml @@ -0,0 +1,61 @@ +openapi: 3.0.1 +info: + version: 1.0.0 + title: Example + license: + name: MIT +servers: + - url: http://api.example.xyz/v1 +paths: + /person/display/{personId}: + get: + parameters: + - name: personId + in: path + required: true + description: The id of the person to retrieve + schema: + type: string + operationId: list + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/Person" +components: + schemas: + Person: + type: object + discriminator: + propertyName: $_type + mapping: + a: '#/components/schemas/Adult' + c: '#/components/schemas/Child' + properties: + $_type: + type: string + lastName: + type: string + firstName: + type: string + Adult: + description: A representation of an adult + allOf: + - $ref: '#/components/schemas/Person' + - type: object + properties: + children: + type: array + items: + $ref: "#/components/schemas/Child" + Child: + description: A representation of a child + allOf: + - $ref: '#/components/schemas/Person' + - type: object + properties: + age: + type: integer + format: int32 \ No newline at end of file From 456dc930e80eb507f1bdbe75bccb2fa4f7aeb7a9 Mon Sep 17 00:00:00 2001 From: 0v1se Date: Wed, 11 Jul 2018 16:08:40 +0300 Subject: [PATCH 2/7] https://github.com/OpenAPITools/openapi-generator/issues/417 CodegenDiscriminator.equals support for CodegenDiscriminator in templates simple test --- .../codegen/CodegenDiscriminator.java | 15 +++++++++++++ .../Java/typeInfoAnnotation.mustache | 9 ++++---- .../JavaInflector/typeInfoAnnotation.mustache | 9 ++++---- .../JavaJaxRS/typeInfoAnnotation.mustache | 9 ++++---- .../typeInfoAnnotation.mustache | 9 ++++---- .../JavaSpring/typeInfoAnnotation.mustache | 9 ++++---- .../java-pkmst/typeInfoAnnotation.mustache | 9 ++++---- .../codegen/DefaultCodegenTest.java | 22 +++++++++++++++++++ 8 files changed, 67 insertions(+), 24 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java index e25b55a5aa3d..349674740383 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; public class CodegenDiscriminator { private String propertyName; @@ -53,4 +54,18 @@ public void setModel(CodegenModel model) { this.model = model; } } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CodegenDiscriminator that = (CodegenDiscriminator) o; + return Objects.equals(propertyName, that.propertyName) && + Objects.equals(mapping, that.mapping); + } + + @Override + public int hashCode() { + return Objects.hash(propertyName, mapping); + } } diff --git a/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache index 1e2d5134b345..d5e8cc04a8b3 100644 --- a/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache @@ -1,7 +1,8 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ - {{#children}} - @JsonSubTypes.Type(value = {{classname}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), - {{/children}} + {{#discriminator.mappedModels}} + @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache index 1e2d5134b345..d5e8cc04a8b3 100644 --- a/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache @@ -1,7 +1,8 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ - {{#children}} - @JsonSubTypes.Type(value = {{classname}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), - {{/children}} + {{#discriminator.mappedModels}} + @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache index 1e2d5134b345..d5e8cc04a8b3 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache @@ -1,7 +1,8 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ - {{#children}} - @JsonSubTypes.Type(value = {{classname}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), - {{/children}} + {{#discriminator.mappedModels}} + @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache index 1e2d5134b345..d5e8cc04a8b3 100644 --- a/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache @@ -1,7 +1,8 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ - {{#children}} - @JsonSubTypes.Type(value = {{classname}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), - {{/children}} + {{#discriminator.mappedModels}} + @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache index 1e2d5134b345..d5e8cc04a8b3 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache @@ -1,7 +1,8 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ - {{#children}} - @JsonSubTypes.Type(value = {{classname}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), - {{/children}} + {{#discriminator.mappedModels}} + @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache index 1e2d5134b345..d5e8cc04a8b3 100644 --- a/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache @@ -1,7 +1,8 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ - {{#children}} - @JsonSubTypes.Type(value = {{classname}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), - {{/children}} + {{#discriminator.mappedModels}} + @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 899e1c4fd8cc..bfdaae3cb6ef 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -356,6 +356,28 @@ public void testExample4() { Assert.assertEquals(codegenParameter2.example, "An example4 value"); } + @Test + public void testInherinceWithCustomMapping() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/allOf.yaml", null, new ParseOptions()).getOpenAPI(); + DefaultCodegen codegen = new DefaultCodegen(); + + String path = "/person/display/{personId}"; + Operation operation = openAPI.getPaths().get(path).getGet(); + CodegenOperation codegenOperation = codegen.fromOperation(path, "GET", operation, openAPI.getComponents().getSchemas()); + verifyDiscriminator(codegenOperation.discriminator); + + Schema person = openAPI.getComponents().getSchemas().get("Person"); + CodegenModel personModel = codegen.fromModel(person.getName(), person, openAPI.getComponents().getSchemas()); + verifyDiscriminator(personModel.discriminator); + } + + private void verifyDiscriminator(CodegenDiscriminator discriminator) { + Assert.assertNotNull(discriminator); + Assert.assertEquals(discriminator.getMappedModels().size(), 2); + Assert.assertEquals(discriminator.getMappedModels().get(0).getMappingName(), "a"); + Assert.assertEquals(discriminator.getMappedModels().get(1).getMappingName(), "c"); + } + private CodegenProperty codegenPropertyWithArrayOfIntegerValues() { CodegenProperty array = new CodegenProperty(); final CodegenProperty items = new CodegenProperty(); From a3bc2537e3ff2d86c0bf67d612c2b20988802837 Mon Sep 17 00:00:00 2001 From: 0v1se Date: Wed, 11 Jul 2018 16:35:33 +0300 Subject: [PATCH 3/7] https://github.com/OpenAPITools/openapi-generator/issues/417 removed modelInheritanceSupportInGson from JavaClientCodegen --- .../codegen/languages/JavaClientCodegen.java | 47 -------- .../codegen/java/JavaClientCodegenTest.java | 105 ------------------ 2 files changed, 152 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 76daf28349e2..a7a5046ea3dd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -523,25 +523,6 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert } } - @SuppressWarnings("unchecked") - @Override - public Map postProcessAllModels(Map objs) { - Map allProcessedModels = super.postProcessAllModels(objs); - if (!additionalProperties.containsKey("gsonFactoryMethod")) { - List allModels = new ArrayList(); - for (String name : allProcessedModels.keySet()) { - Map models = (Map) allProcessedModels.get(name); - try { - allModels.add(((List) models.get("models")).get(0)); - } catch (Exception e) { - e.printStackTrace(); - } - } - additionalProperties.put("parent", modelInheritanceSupportInGson(allModels)); - } - return allProcessedModels; - } - @Override public Map postProcessModelsEnum(Map objs) { objs = super.postProcessModelsEnum(objs); @@ -564,34 +545,6 @@ public Map postProcessModelsEnum(Map objs) { return objs; } - public static List> modelInheritanceSupportInGson(List allModels) { - Map> byParent = new LinkedHashMap<>(); - for (Object model : allModels) { - Map entry = (Map) model; - CodegenModel parent = ((CodegenModel)entry.get("model")).parentModel; - if(null!= parent) { - byParent.computeIfAbsent(parent, k -> new LinkedList<>()).add((CodegenModel)entry.get("model")); - } - } - List> parentsList = new ArrayList<>(); - for (CodegenModel parentModel : byParent.keySet()) { - List> childrenList = new ArrayList<>(); - Map parent = new HashMap<>(); - parent.put("classname", parentModel.classname); - List childrenModels = byParent.get(parentModel); - for (CodegenModel model : childrenModels) { - Map child = new HashMap<>(); - child.put("name", model.name); - child.put("classname", model.classname); - childrenList.add(child); - } - parent.put("children", childrenList); - parent.put("discriminator", parentModel.discriminator); - parentsList.add(parent); - } - return parentsList; - } - public void setUseRxJava(boolean useRxJava) { this.useRxJava = useRxJava; doNotUseRx = false; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index b3ee65c1c069..94f4aa7c05c8 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -64,111 +64,6 @@ public class JavaClientCodegenTest { - @Test - public void modelInheritanceSupportInGson() throws Exception { - List> allModels = new ArrayList<>(); - - CodegenModel parent1 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - parent1.setName("parent1"); - parent1.setClassname("test.Parent1"); - - Map modelMap = new HashMap<>(); - modelMap.put("model", parent1); - allModels.add(modelMap); - - CodegenModel parent2 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - parent2.setName("parent2"); - parent2.setClassname("test.Parent2"); - - modelMap = new HashMap<>(); - modelMap.put("model", parent2); - allModels.add(modelMap); - - CodegenModel model1 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - model1.setName("model1"); - model1.setClassname("test.Model1"); - model1.setParentModel(parent1); - - modelMap = new HashMap<>(); - modelMap.put("model", model1); - allModels.add(modelMap); - - CodegenModel model2 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - model2.setName("model2"); - model2.setClassname("test.Model2"); - model2.setParentModel(parent1); - - modelMap = new HashMap<>(); - modelMap.put("model", model2); - allModels.add(modelMap); - - CodegenModel model3 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - model3.setName("model3"); - model3.setClassname("test.Model3"); - model3.setParentModel(parent1); - - modelMap = new HashMap<>(); - modelMap.put("model", model3); - allModels.add(modelMap); - - CodegenModel model4 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - model4.setName("model4"); - model4.setClassname("test.Model4"); - model4.setParentModel(parent2); - - modelMap = new HashMap<>(); - modelMap.put("model", model4); - allModels.add(modelMap); - - CodegenModel model5 = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - model5.setName("model5"); - model5.setClassname("test.Model5"); - model5.setParentModel(parent2); - - modelMap = new HashMap<>(); - modelMap.put("model", model5); - allModels.add(modelMap); - - List> parentsList = JavaClientCodegen.modelInheritanceSupportInGson(allModels); - - Assert.assertNotNull(parentsList); - Assert.assertEquals(parentsList.size(), 2); - - Map parent = parentsList.get(0); - Assert.assertEquals(parent.get("classname"), "test.Parent1"); - - List children = (List) parent.get("children"); - Assert.assertNotNull(children); - Assert.assertEquals(children.size(), 3); - - Map models = (Map) children.get(0); - Assert.assertEquals(models.get("name"), "model1"); - Assert.assertEquals(models.get("classname"), "test.Model1"); - - models = (Map) children.get(1); - Assert.assertEquals(models.get("name"), "model2"); - Assert.assertEquals(models.get("classname"), "test.Model2"); - - models = (Map) children.get(2); - Assert.assertEquals(models.get("name"), "model3"); - Assert.assertEquals(models.get("classname"), "test.Model3"); - - parent = parentsList.get(1); - Assert.assertEquals(parent.get("classname"), "test.Parent2"); - - children = (List) parent.get("children"); - Assert.assertNotNull(children); - Assert.assertEquals(children.size(), 2); - - models = (Map) children.get(0); - Assert.assertEquals(models.get("name"), "model4"); - Assert.assertEquals(models.get("classname"), "test.Model4"); - - models = (Map) children.get(1); - Assert.assertEquals(models.get("name"), "model5"); - Assert.assertEquals(models.get("classname"), "test.Model5"); - } - @Test public void arraysInRequestBody() throws Exception { final JavaClientCodegen codegen = new JavaClientCodegen(); From cf53269d0e32f5f34ab3619d3097a355b0b97e34 Mon Sep 17 00:00:00 2001 From: 0v1se Date: Wed, 11 Jul 2018 16:44:27 +0300 Subject: [PATCH 4/7] https://github.com/OpenAPITools/openapi-generator/issues/417 fix test --- .../main/java/org/openapitools/codegen/DefaultCodegen.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 7753a8f19f4e..616232c74e7a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1475,6 +1475,10 @@ public CodegenModel fromModel(String name, Schema schema, Map al // unalias schema schema = ModelUtils.unaliasSchema(allDefinitions, schema); + if (schema == null) { + LOGGER.warn("Schema {} not found", name); + return null; + } CodegenModel m = CodegenModelFactory.newInstance(CodegenModelType.MODEL); From a0fe6bca8839e69dbd0b22ab910db06a3a27474d Mon Sep 17 00:00:00 2001 From: 0v1se Date: Thu, 12 Jul 2018 10:32:00 +0300 Subject: [PATCH 5/7] https://github.com/OpenAPITools/openapi-generator/issues/417 fix for empty mapping update samples fix gson deserializer --- .../codegen/CodegenDiscriminator.java | 45 +++++++++++++------ .../openapitools/codegen/DefaultCodegen.java | 28 +++++++----- .../src/main/resources/Java/JSON.mustache | 13 +++--- .../Java/libraries/retrofit2/JSON.mustache | 13 +++--- .../Java/typeInfoAnnotation.mustache | 2 +- .../JavaInflector/typeInfoAnnotation.mustache | 2 +- .../JavaJaxRS/typeInfoAnnotation.mustache | 2 +- .../typeInfoAnnotation.mustache | 2 +- .../JavaSpring/typeInfoAnnotation.mustache | 2 +- .../java-pkmst/typeInfoAnnotation.mustache | 2 +- .../codegen/DefaultCodegenTest.java | 37 +++++++++++---- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../java/org/openapitools/client/JSON.java | 5 ++- .../java/org/openapitools/client/JSON.java | 5 ++- .../java/org/openapitools/client/JSON.java | 5 ++- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- .../java/org/openapitools/client/JSON.java | 5 ++- .../java/org/openapitools/client/JSON.java | 5 ++- .../java/org/openapitools/client/JSON.java | 5 ++- .../org/openapitools/client/model/Animal.java | 3 +- .../org/openapitools/client/model/Animal.java | 3 +- 30 files changed, 139 insertions(+), 78 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java index 349674740383..79c2c40874b3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java @@ -1,14 +1,11 @@ package org.openapitools.codegen; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; public class CodegenDiscriminator { private String propertyName; private Map mapping; - private List mappedModels = new ArrayList<>(); + private Set mappedModels = new LinkedHashSet<>(); public String getPropertyName() { return propertyName; @@ -26,17 +23,22 @@ public void setMapping(Map mapping) { this.mapping = mapping; } - public List getMappedModels() { + public Set getMappedModels() { return mappedModels; } - public void setMappedModels(List mappedModels) { + public void setMappedModels(Set mappedModels) { this.mappedModels = mappedModels; } public static class MappedModel { private String mappingName; - private CodegenModel model; + private String modelName; + + public MappedModel(String mappingName, String modelName) { + this.mappingName = mappingName; + this.modelName = modelName; + } public String getMappingName() { return mappingName; @@ -46,12 +48,26 @@ public void setMappingName(String mappingName) { this.mappingName = mappingName; } - public CodegenModel getModel() { - return model; + public String getModelName() { + return modelName; + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MappedModel that = (MappedModel) o; + return Objects.equals(mappingName, that.mappingName) && + Objects.equals(modelName, that.modelName); } - public void setModel(CodegenModel model) { - this.model = model; + @Override + public int hashCode() { + return Objects.hash(mappingName, modelName); } } @@ -61,11 +77,12 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; CodegenDiscriminator that = (CodegenDiscriminator) o; return Objects.equals(propertyName, that.propertyName) && - Objects.equals(mapping, that.mapping); + Objects.equals(mapping, that.mapping) && + Objects.equals(mappedModels, that.mappedModels); } @Override public int hashCode() { - return Objects.hash(propertyName, mapping); + return Objects.hash(propertyName, mapping, mappedModels); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 616232c74e7a..d7b0bb5f27c1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -72,6 +72,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; public class DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); @@ -1499,7 +1500,7 @@ public CodegenModel fromModel(String name, Schema schema, Map al m.getVendorExtensions().putAll(schema.getExtensions()); } m.isAlias = typeAliases.containsKey(name); - m.discriminator = createDiscriminator(schema, allDefinitions); + m.discriminator = createDiscriminator(name, schema, allDefinitions); if (schema.getXml() != null) { m.xmlPrefix = schema.getXml().getPrefix(); @@ -1526,7 +1527,7 @@ public CodegenModel fromModel(String name, Schema schema, Map al int modelImplCnt = 0; // only one inline object allowed in a ComposedModel for (Schema innerModel : composed.getAllOf()) { if (m.discriminator == null) { - m.discriminator = createDiscriminator(schema, allDefinitions); + m.discriminator = createDiscriminator(name, schema, allDefinitions); } if (innerModel.getXml() != null) { m.xmlPrefix = innerModel.getXml().getPrefix(); @@ -1641,23 +1642,30 @@ public CodegenModel fromModel(String name, Schema schema, Map al return m; } - private CodegenDiscriminator createDiscriminator(Schema schema, Map allDefinitions) { + private CodegenDiscriminator createDiscriminator(String schemaName, Schema schema, Map allDefinitions) { if(schema.getDiscriminator() == null) { return null; } CodegenDiscriminator discriminator = new CodegenDiscriminator(); discriminator.setPropertyName(schema.getDiscriminator().getPropertyName()); discriminator.setMapping(schema.getDiscriminator().getMapping()); - if(schema.getDiscriminator().getMapping() != null) { + if(schema.getDiscriminator().getMapping() != null && !schema.getDiscriminator().getMapping().isEmpty()) { for (Entry e : schema.getDiscriminator().getMapping().entrySet()) { String name = ModelUtils.getSimpleRef(e.getValue()); - Schema referencedSchema = allDefinitions.get(name); - CodegenModel model = fromModel(name, referencedSchema, allDefinitions); - MappedModel mappedModel = new MappedModel(); - mappedModel.setMappingName(e.getKey()); - mappedModel.setModel(model); - discriminator.getMappedModels().add(mappedModel); + discriminator.getMappedModels().add(new MappedModel(e.getKey(), name)); } + } else { + allDefinitions.forEach((childName, child) -> { + if (child instanceof ComposedSchema && ((ComposedSchema) child).getAllOf() != null) { + Set parentSchemas = ((ComposedSchema) child).getAllOf().stream() + .filter(s -> s.get$ref() != null) + .map(s -> ModelUtils.getSimpleRef(s.get$ref())) + .collect(Collectors.toSet()); + if (parentSchemas.contains(schemaName)) { + discriminator.getMappedModels().add(new MappedModel(childName, childName)); + } + } + }); } return discriminator; } diff --git a/modules/openapi-generator/src/main/resources/Java/JSON.mustache b/modules/openapi-generator/src/main/resources/Java/JSON.mustache index 4ab6cee5cb1a..92fa0f9d0fa0 100644 --- a/modules/openapi-generator/src/main/resources/Java/JSON.mustache +++ b/modules/openapi-generator/src/main/resources/Java/JSON.mustache @@ -60,21 +60,20 @@ public class JSON { public static GsonBuilder createGson() { GsonFireBuilder fireBuilder = new GsonFireBuilder() - {{#parent}} - .registerTypeSelector({{classname}}.class, new TypeSelector() { + {{#models}}{{#model}}{{#discriminator}} .registerTypeSelector({{classname}}.class, new TypeSelector() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - {{#children}} - classByDiscriminatorValue.put("{{name}}".toUpperCase(), {{classname}}.class); - {{/children}} + {{#mappedModels}} + classByDiscriminatorValue.put("{{mappingName}}".toUpperCase(), {{modelName}}.class); + {{/mappedModels}} classByDiscriminatorValue.put("{{classname}}".toUpperCase(), {{classname}}.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "{{{discriminatorName}}}")); + getDiscriminatorValue(readElement, "{{{propertyName}}}")); } }) - {{/parent}} + {{/discriminator}}{{/model}}{{/models}} ; GsonBuilder builder = fireBuilder.createGsonBuilder(); {{#disableHtmlEscaping}} diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/retrofit2/JSON.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/retrofit2/JSON.mustache index 3dcea989c19d..ac8958824cb8 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/retrofit2/JSON.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/retrofit2/JSON.mustache @@ -57,21 +57,20 @@ public class JSON { public static GsonBuilder createGson() { GsonFireBuilder fireBuilder = new GsonFireBuilder() - {{#parent}} - .registerTypeSelector({{classname}}.class, new TypeSelector() { + {{#models}}{{#model}}{{#discriminator}} .registerTypeSelector({{classname}}.class, new TypeSelector() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - {{#children}} - classByDiscriminatorValue.put("{{name}}".toUpperCase(), {{classname}}.class); - {{/children}} + {{#mappedModels}} + classByDiscriminatorValue.put("{{mappingName}}".toUpperCase(), {{modelName}}.class); + {{/mappedModels}} classByDiscriminatorValue.put("{{classname}}".toUpperCase(), {{classname}}.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "{{{discriminatorName}}}")); + getDiscriminatorValue(readElement, "{{{propertyName}}}")); } }) - {{/parent}} + {{/discriminator}}{{/model}}{{/models}} ; return fireBuilder.createGsonBuilder(); } diff --git a/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache index d5e8cc04a8b3..8e4b33b78480 100644 --- a/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/Java/typeInfoAnnotation.mustache @@ -3,6 +3,6 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} - @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache index d5e8cc04a8b3..8e4b33b78480 100644 --- a/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaInflector/typeInfoAnnotation.mustache @@ -3,6 +3,6 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} - @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache index d5e8cc04a8b3..8e4b33b78480 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache @@ -3,6 +3,6 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} - @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache index d5e8cc04a8b3..8e4b33b78480 100644 --- a/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaPlayFramework/typeInfoAnnotation.mustache @@ -3,6 +3,6 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} - @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache index d5e8cc04a8b3..8e4b33b78480 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/typeInfoAnnotation.mustache @@ -3,6 +3,6 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} - @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache index d5e8cc04a8b3..8e4b33b78480 100644 --- a/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/java-pkmst/typeInfoAnnotation.mustache @@ -3,6 +3,6 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminatorName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} - @JsonSubTypes.Type(value = {{model.name}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), + @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), {{/discriminator.mappedModels}} }){{/jackson}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index bfdaae3cb6ef..be71943daf79 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -357,25 +357,44 @@ public void testExample4() { } @Test - public void testInherinceWithCustomMapping() { + public void testDiscriminator() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml", null, new ParseOptions()).getOpenAPI(); + DefaultCodegen codegen = new DefaultCodegen(); + + Schema animal = openAPI.getComponents().getSchemas().get("Animal"); + CodegenModel animalModel = codegen.fromModel("Animal", animal, openAPI.getComponents().getSchemas()); + CodegenDiscriminator discriminator = animalModel.getDiscriminator(); + CodegenDiscriminator test = new CodegenDiscriminator(); + test.setPropertyName("className"); + test.getMappedModels().add(new CodegenDiscriminator.MappedModel("Dog", "Dog")); + test.getMappedModels().add(new CodegenDiscriminator.MappedModel("Cat", "Cat")); + Assert.assertEquals(discriminator, test); + } + + @Test + public void testDiscriminatorWithCustomMapping() { final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/allOf.yaml", null, new ParseOptions()).getOpenAPI(); DefaultCodegen codegen = new DefaultCodegen(); String path = "/person/display/{personId}"; Operation operation = openAPI.getPaths().get(path).getGet(); CodegenOperation codegenOperation = codegen.fromOperation(path, "GET", operation, openAPI.getComponents().getSchemas()); - verifyDiscriminator(codegenOperation.discriminator); + verifyPersonDiscriminator(codegenOperation.discriminator); Schema person = openAPI.getComponents().getSchemas().get("Person"); - CodegenModel personModel = codegen.fromModel(person.getName(), person, openAPI.getComponents().getSchemas()); - verifyDiscriminator(personModel.discriminator); + CodegenModel personModel = codegen.fromModel("Person", person, openAPI.getComponents().getSchemas()); + verifyPersonDiscriminator(personModel.discriminator); } - private void verifyDiscriminator(CodegenDiscriminator discriminator) { - Assert.assertNotNull(discriminator); - Assert.assertEquals(discriminator.getMappedModels().size(), 2); - Assert.assertEquals(discriminator.getMappedModels().get(0).getMappingName(), "a"); - Assert.assertEquals(discriminator.getMappedModels().get(1).getMappingName(), "c"); + private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) { + CodegenDiscriminator test = new CodegenDiscriminator(); + test.setPropertyName("$_type"); + test.setMapping(new HashMap<>()); + test.getMapping().put("a", "#/components/schemas/Adult"); + test.getMapping().put("c", "#/components/schemas/Child"); + test.getMappedModels().add(new CodegenDiscriminator.MappedModel("a", "Adult")); + test.getMappedModels().add(new CodegenDiscriminator.MappedModel("c", "Child")); + Assert.assertEquals(discriminator, test); } private CodegenProperty codegenPropertyWithArrayOfIntegerValues() { diff --git a/samples/client/petstore/java/feign/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/feign/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/feign/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/feign/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/google-api-client/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/google-api-client/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/google-api-client/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/google-api-client/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/jersey1/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/jersey1/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/jersey1/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/jersey1/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/jersey2-java6/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/jersey2-java6/src/main/java/org/openapitools/client/model/Animal.java index 6ead598aa2d8..090fe37550e0 100644 --- a/samples/client/petstore/java/jersey2-java6/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/jersey2-java6/src/main/java/org/openapitools/client/model/Animal.java @@ -25,7 +25,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/jersey2/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/jersey2/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/jersey2/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java index f9f55a2d3821..8b4f1f34d027 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java @@ -55,14 +55,15 @@ public static GsonBuilder createGson() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class); + classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Animal".toUpperCase(), Animal.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "")); + getDiscriminatorValue(readElement, "className")); } }) + ; GsonBuilder builder = fireBuilder.createGsonBuilder(); return builder; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java index f9f55a2d3821..8b4f1f34d027 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java @@ -55,14 +55,15 @@ public static GsonBuilder createGson() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class); + classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Animal".toUpperCase(), Animal.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "")); + getDiscriminatorValue(readElement, "className")); } }) + ; GsonBuilder builder = fireBuilder.createGsonBuilder(); return builder; diff --git a/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java index f9f55a2d3821..8b4f1f34d027 100644 --- a/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java @@ -55,14 +55,15 @@ public static GsonBuilder createGson() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class); + classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Animal".toUpperCase(), Animal.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "")); + getDiscriminatorValue(readElement, "className")); } }) + ; GsonBuilder builder = fireBuilder.createGsonBuilder(); return builder; diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/Animal.java index 8a3549a6a73c..4171261093eb 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/Animal.java @@ -28,7 +28,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/retrofit2-play24/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/retrofit2-play24/src/main/java/org/openapitools/client/model/Animal.java index 6a2343e41bec..96bdf028335d 100644 --- a/samples/client/petstore/java/retrofit2-play24/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/retrofit2-play24/src/main/java/org/openapitools/client/model/Animal.java @@ -28,7 +28,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/retrofit2-play25/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/retrofit2-play25/src/main/java/org/openapitools/client/model/Animal.java index 6a2343e41bec..96bdf028335d 100644 --- a/samples/client/petstore/java/retrofit2-play25/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/retrofit2-play25/src/main/java/org/openapitools/client/model/Animal.java @@ -28,7 +28,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/retrofit2/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/retrofit2/src/main/java/org/openapitools/client/JSON.java index 911fa7269459..cd8031a6b961 100644 --- a/samples/client/petstore/java/retrofit2/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/retrofit2/src/main/java/org/openapitools/client/JSON.java @@ -52,14 +52,15 @@ public static GsonBuilder createGson() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class); + classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Animal".toUpperCase(), Animal.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "")); + getDiscriminatorValue(readElement, "className")); } }) + ; return fireBuilder.createGsonBuilder(); } diff --git a/samples/client/petstore/java/retrofit2rx/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/retrofit2rx/src/main/java/org/openapitools/client/JSON.java index 911fa7269459..cd8031a6b961 100644 --- a/samples/client/petstore/java/retrofit2rx/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/retrofit2rx/src/main/java/org/openapitools/client/JSON.java @@ -52,14 +52,15 @@ public static GsonBuilder createGson() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class); + classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Animal".toUpperCase(), Animal.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "")); + getDiscriminatorValue(readElement, "className")); } }) + ; return fireBuilder.createGsonBuilder(); } diff --git a/samples/client/petstore/java/retrofit2rx2/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/retrofit2rx2/src/main/java/org/openapitools/client/JSON.java index 911fa7269459..cd8031a6b961 100644 --- a/samples/client/petstore/java/retrofit2rx2/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/retrofit2rx2/src/main/java/org/openapitools/client/JSON.java @@ -52,14 +52,15 @@ public static GsonBuilder createGson() { @Override public Class getClassForElement(JsonElement readElement) { Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class); + classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class); classByDiscriminatorValue.put("Animal".toUpperCase(), Animal.class); return getClassByDiscriminator( classByDiscriminatorValue, - getDiscriminatorValue(readElement, "")); + getDiscriminatorValue(readElement, "className")); } }) + ; return fireBuilder.createGsonBuilder(); } diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/Animal.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/Animal.java index aa818c1efa31..6819bd7fe7d1 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/Animal.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/Animal.java @@ -26,7 +26,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), From e96aaf6be918c64551564a7a0ebd86f0d971d108 Mon Sep 17 00:00:00 2001 From: 0v1se Date: Thu, 12 Jul 2018 10:36:12 +0300 Subject: [PATCH 6/7] https://github.com/OpenAPITools/openapi-generator/issues/417 update all java samples --- .../java-inflector/.openapi-generator/VERSION | 2 +- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/MapTest.java | 49 ++++- .../java/org/openapitools/model/Order.java | 2 +- .../controllers/FakeController.java | 14 ++ .../src/main/openapi/openapi.yaml | 105 +++++++++- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Cat.java | 2 +- .../app/apimodels/EnumArrays.java | 2 +- .../app/apimodels/MapTest.java | 60 +++++- .../app/apimodels/Order.java | 2 +- .../app/controllers/FakeApiController.java | 17 ++ .../app/controllers/FakeApiControllerImp.java | 6 + .../FakeApiControllerImpInterface.java | 3 + .../app/controllers/PetApiController.java | 21 ++ .../app/controllers/PetApiControllerImp.java | 6 + .../PetApiControllerImpInterface.java | 2 + .../conf/routes | 2 + .../public/openapi.json | 181 ++++++++++++++++-- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../public/openapi.json | 6 +- .../.openapi-generator/VERSION | 2 +- .../app/apimodels/Order.java | 2 +- .../java-play-framework/public/openapi.json | 6 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- .../java/org/openapitools/model/Animal.java | 3 +- 55 files changed, 514 insertions(+), 80 deletions(-) diff --git a/samples/server/petstore/java-inflector/.openapi-generator/VERSION b/samples/server/petstore/java-inflector/.openapi-generator/VERSION index ad121e8340e0..dde25ef08e8c 100644 --- a/samples/server/petstore/java-inflector/.openapi-generator/VERSION +++ b/samples/server/petstore/java-inflector/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.1-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Cat.java index 17464fba61f0..5335d698a8b2 100644 --- a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Cat.java @@ -26,7 +26,7 @@ public Cat declawed(Boolean declawed) { @ApiModelProperty(value = "") @JsonProperty("declawed") - public Boolean isDeclawed() { + public Boolean getDeclawed() { return declawed; } public void setDeclawed(Boolean declawed) { diff --git a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/MapTest.java index 5bc2b5bd12c5..2ba14f914ebe 100644 --- a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/MapTest.java @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.openapitools.model.StringBooleanMap; @@ -53,6 +54,12 @@ public static InnerEnum fromValue(String text) { @JsonProperty("map_of_enum_string") private Map mapOfEnumString = null; + @JsonProperty("direct_map") + private Map directMap = null; + + @JsonProperty("indirect_map") + private StringBooleanMap indirectMap = null; + /** **/ public MapTest mapMapOfString(Map> mapMapOfString) { @@ -87,6 +94,40 @@ public void setMapOfEnumString(Map mapOfEnumString) { this.mapOfEnumString = mapOfEnumString; } + /** + **/ + public MapTest directMap(Map directMap) { + this.directMap = directMap; + return this; + } + + + @ApiModelProperty(value = "") + @JsonProperty("direct_map") + public Map getDirectMap() { + return directMap; + } + public void setDirectMap(Map directMap) { + this.directMap = directMap; + } + + /** + **/ + public MapTest indirectMap(StringBooleanMap indirectMap) { + this.indirectMap = indirectMap; + return this; + } + + + @ApiModelProperty(value = "") + @JsonProperty("indirect_map") + public StringBooleanMap getIndirectMap() { + return indirectMap; + } + public void setIndirectMap(StringBooleanMap indirectMap) { + this.indirectMap = indirectMap; + } + @Override public boolean equals(java.lang.Object o) { @@ -98,12 +139,14 @@ public boolean equals(java.lang.Object o) { } MapTest mapTest = (MapTest) o; return Objects.equals(mapMapOfString, mapTest.mapMapOfString) && - Objects.equals(mapOfEnumString, mapTest.mapOfEnumString); + Objects.equals(mapOfEnumString, mapTest.mapOfEnumString) && + Objects.equals(directMap, mapTest.directMap) && + Objects.equals(indirectMap, mapTest.indirectMap); } @Override public int hashCode() { - return Objects.hash(mapMapOfString, mapOfEnumString); + return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap); } @Override @@ -113,6 +156,8 @@ public String toString() { sb.append(" mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n"); sb.append(" mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n"); + sb.append(" directMap: ").append(toIndentedString(directMap)).append("\n"); + sb.append(" indirectMap: ").append(toIndentedString(indirectMap)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Order.java index 30891296b808..632b6f6e4ed6 100644 --- a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/Order.java @@ -161,7 +161,7 @@ public Order complete(Boolean complete) { @ApiModelProperty(value = "") @JsonProperty("complete") - public Boolean isComplete() { + public Boolean getComplete() { return complete; } public void setComplete(Boolean complete) { diff --git a/samples/server/petstore/java-inflector/src/main/java/org/openapitools/controllers/FakeController.java b/samples/server/petstore/java-inflector/src/main/java/org/openapitools/controllers/FakeController.java index 7b8a05cce6ed..e069a8c9751b 100644 --- a/samples/server/petstore/java-inflector/src/main/java/org/openapitools/controllers/FakeController.java +++ b/samples/server/petstore/java-inflector/src/main/java/org/openapitools/controllers/FakeController.java @@ -14,7 +14,9 @@ import org.openapitools.model.Client; import java.util.Date; import java.io.File; +import org.openapitools.model.FileSchemaTestClass; import java.util.Map; +import org.openapitools.model.ModelApiResponse; import org.openapitools.model.OuterComposite; import org.openapitools.model.User; @@ -50,6 +52,12 @@ public ResponseContext fakeOuterStringSerialize(RequestContext request , String } */ + /* + public ResponseContext testBodyWithFileSchema(RequestContext request , FileSchemaTestClass fileSchemaTestClass) { + return new ResponseContext().status(Status.INTERNAL_SERVER_ERROR).entity( "Not implemented" ); + } + */ + /* public ResponseContext testBodyWithQueryParams(RequestContext request , String query, User user) { return new ResponseContext().status(Status.INTERNAL_SERVER_ERROR).entity( "Not implemented" ); @@ -86,5 +94,11 @@ public ResponseContext testJsonFormData(RequestContext request , String param, S } */ + /* + public ResponseContext uploadFileWithRequiredFile(RequestContext request , Long petId, FormDataContentDisposition fileDetail, String additionalMetadata) { + return new ResponseContext().status(Status.INTERNAL_SERVER_ERROR).entity( "Not implemented" ); + } + */ + } diff --git a/samples/server/petstore/java-inflector/src/main/openapi/openapi.yaml b/samples/server/petstore/java-inflector/src/main/openapi/openapi.yaml index 819110c3f904..ae9b35de6a83 100644 --- a/samples/server/petstore/java-inflector/src/main/openapi/openapi.yaml +++ b/samples/server/petstore/java-inflector/src/main/openapi/openapi.yaml @@ -1026,6 +1026,66 @@ paths: - $another-fake? x-contentType: application/json x-accepts: application/json + /fake/body-with-file-schema: + put: + description: For this test, the body for this request much reference a schema named `File`. + operationId: testBodyWithFileSchema + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FileSchemaTestClass' + required: true + responses: + 200: + content: {} + description: Success + tags: + - fake + x-contentType: application/json + x-accepts: application/json + /fake/{petId}/uploadImageWithRequiredFile: + post: + operationId: uploadFileWithRequiredFile + parameters: + - description: ID of pet to update + in: path + name: petId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + multipart/form-data: + schema: + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + format: binary + type: string + required: + - file + required: true + responses: + 200: + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + description: successful operation + security: + - petstore_auth: + - write:pets + - read:pets + summary: uploads an image (required) + tags: + - pet + x-contentType: multipart/form-data + x-accepts: application/json components: schemas: Category: @@ -1331,14 +1391,18 @@ components: type: array type: object OuterComposite: - example: {} + example: + my_string: my_string + my_number: 0.80082819046101150206595775671303272247314453125 + my_boolean: true properties: my_number: - $ref: '#/components/schemas/OuterNumber' + type: number my_string: - $ref: '#/components/schemas/OuterString' + type: string my_boolean: - $ref: '#/components/schemas/OuterBoolean' + type: boolean + x-codegen-body-parameter-name: boolean_post_body type: object format_test: properties: @@ -1424,6 +1488,21 @@ components: OuterBoolean: type: boolean x-codegen-body-parameter-name: boolean_post_body + FileSchemaTestClass: + example: + file: + sourceURI: sourceURI + files: + - sourceURI: sourceURI + - sourceURI: sourceURI + properties: + file: + $ref: '#/components/schemas/File' + files: + items: + $ref: '#/components/schemas/File' + type: array + type: object Animal: discriminator: propertyName: className @@ -1436,6 +1515,10 @@ components: required: - className type: object + StringBooleanMap: + additionalProperties: + type: boolean + type: object Cat: allOf: - $ref: '#/components/schemas/Animal' @@ -1458,6 +1541,12 @@ components: - lower type: string type: object + direct_map: + additionalProperties: + type: boolean + type: object + indirect_map: + $ref: '#/components/schemas/StringBooleanMap' type: object Tag: example: @@ -1476,6 +1565,14 @@ components: items: $ref: '#/components/schemas/Animal' type: array + File: + example: + sourceURI: sourceURI + properties: + sourceURI: + description: Test capitalization + type: string + type: object Pet: example: photoUrls: diff --git a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-api-package-override/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-api-package-override/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-api-package-override/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-api-package-override/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-api-package-override/public/openapi.json b/samples/server/petstore/java-play-framework-api-package-override/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-api-package-override/public/openapi.json +++ b/samples/server/petstore/java-play-framework-api-package-override/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-async/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-async/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-async/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-async/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-async/public/openapi.json b/samples/server/petstore/java-play-framework-async/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-async/public/openapi.json +++ b/samples/server/petstore/java-play-framework-async/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-controller-only/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-controller-only/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-controller-only/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-controller-only/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-controller-only/public/openapi.json b/samples/server/petstore/java-play-framework-controller-only/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-controller-only/public/openapi.json +++ b/samples/server/petstore/java-play-framework-controller-only/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Cat.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Cat.java index a87f399d687f..5e8dfb06c054 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Cat.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Cat.java @@ -24,7 +24,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - public Boolean isDeclawed() { + public Boolean getDeclawed() { return declawed; } diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/EnumArrays.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/EnumArrays.java index a82c9ee422d7..5f2c63d116d3 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/EnumArrays.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/EnumArrays.java @@ -77,7 +77,7 @@ public static ArrayEnumEnum fromValue(String text) { return null; } } - + @JsonProperty("array_enum") private List arrayEnum = null; diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/MapTest.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/MapTest.java index 7cd05af295f7..5c1518d4cd3a 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/MapTest.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/MapTest.java @@ -1,5 +1,6 @@ package apimodels; +import apimodels.StringBooleanMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -47,10 +48,16 @@ public static InnerEnum fromValue(String text) { return null; } } - + @JsonProperty("map_of_enum_string") private Map mapOfEnumString = null; + @JsonProperty("direct_map") + private Map directMap = null; + + @JsonProperty("indirect_map") + private StringBooleanMap indirectMap = null; + public MapTest mapMapOfString(Map> mapMapOfString) { this.mapMapOfString = mapMapOfString; return this; @@ -102,6 +109,49 @@ public void setMapOfEnumString(Map mapOfEnumString) { this.mapOfEnumString = mapOfEnumString; } + public MapTest directMap(Map directMap) { + this.directMap = directMap; + return this; + } + + public MapTest putDirectMapItem(String key, Boolean directMapItem) { + if (this.directMap == null) { + this.directMap = new HashMap<>(); + } + this.directMap.put(key, directMapItem); + return this; + } + + /** + * Get directMap + * @return directMap + **/ + public Map getDirectMap() { + return directMap; + } + + public void setDirectMap(Map directMap) { + this.directMap = directMap; + } + + public MapTest indirectMap(StringBooleanMap indirectMap) { + this.indirectMap = indirectMap; + return this; + } + + /** + * Get indirectMap + * @return indirectMap + **/ + @Valid + public StringBooleanMap getIndirectMap() { + return indirectMap; + } + + public void setIndirectMap(StringBooleanMap indirectMap) { + this.indirectMap = indirectMap; + } + @Override public boolean equals(java.lang.Object o) { @@ -113,12 +163,14 @@ public boolean equals(java.lang.Object o) { } MapTest mapTest = (MapTest) o; return Objects.equals(mapMapOfString, mapTest.mapMapOfString) && - Objects.equals(mapOfEnumString, mapTest.mapOfEnumString); + Objects.equals(mapOfEnumString, mapTest.mapOfEnumString) && + Objects.equals(directMap, mapTest.directMap) && + Objects.equals(indirectMap, mapTest.indirectMap); } @Override public int hashCode() { - return Objects.hash(mapMapOfString, mapOfEnumString); + return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap); } @SuppressWarnings("StringBufferReplaceableByString") @@ -129,6 +181,8 @@ public String toString() { sb.append(" mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n"); sb.append(" mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n"); + sb.append(" directMap: ").append(toIndentedString(directMap)).append("\n"); + sb.append(" indirectMap: ").append(toIndentedString(indirectMap)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Order.java index 50990892750b..404beae15bc2 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiController.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiController.java index 6a20f9c52a35..fb501df6b6f3 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiController.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiController.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import apimodels.Client; +import apimodels.FileSchemaTestClass; import java.io.InputStream; import java.time.LocalDate; import java.util.Map; @@ -116,6 +117,22 @@ public Result fakeOuterStringSerialize() throws Exception { return ok(result); } + @ApiAction + public Result testBodyWithFileSchema() throws Exception { + JsonNode nodefileSchemaTestClass = request().body().asJson(); + FileSchemaTestClass fileSchemaTestClass; + if (nodefileSchemaTestClass != null) { + fileSchemaTestClass = mapper.readValue(nodefileSchemaTestClass.toString(), FileSchemaTestClass.class); + if (configuration.getBoolean("useInputBeanValidation")) { + OpenAPIUtils.validate(fileSchemaTestClass); + } + } else { + throw new IllegalArgumentException("'FileSchemaTestClass' parameter is required"); + } + imp.testBodyWithFileSchema(fileSchemaTestClass); + return ok(); + } + @ApiAction public Result testBodyWithQueryParams() throws Exception { JsonNode nodeuser = request().body().asJson(); diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImp.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImp.java index cd25ea9238eb..a33162119274 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImp.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImp.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import apimodels.Client; +import apimodels.FileSchemaTestClass; import java.io.InputStream; import java.time.LocalDate; import java.util.Map; @@ -41,6 +42,11 @@ public String fakeOuterStringSerialize(String body) throws Exception { return new String(); } + @Override + public void testBodyWithFileSchema(FileSchemaTestClass fileSchemaTestClass) throws Exception { + //Do your magic!!! + } + @Override public void testBodyWithQueryParams( @NotNull String query, User user) throws Exception { //Do your magic!!! diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImpInterface.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImpInterface.java index 0ab57c66a42f..e36e7c50120c 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImpInterface.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/FakeApiControllerImpInterface.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import apimodels.Client; +import apimodels.FileSchemaTestClass; import java.io.InputStream; import java.time.LocalDate; import java.util.Map; @@ -26,6 +27,8 @@ public interface FakeApiControllerImpInterface { String fakeOuterStringSerialize(String body) throws Exception; + void testBodyWithFileSchema(FileSchemaTestClass fileSchemaTestClass) throws Exception; + void testBodyWithQueryParams( @NotNull String query, User user) throws Exception; Client testClientModel(Client client) throws Exception; diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiController.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiController.java index 8dff19402378..4b5720896eec 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiController.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiController.java @@ -177,4 +177,25 @@ public Result uploadFile(Long petId) throws Exception { JsonNode result = mapper.valueToTree(obj); return ok(result); } + + @ApiAction + public Result uploadFileWithRequiredFile(Long petId) throws Exception { + String valueadditionalMetadata = (request().body().asMultipartFormData().asFormUrlEncoded().get("additionalMetadata"))[0]; + String additionalMetadata; + if (valueadditionalMetadata != null) { + additionalMetadata = valueadditionalMetadata; + } else { + additionalMetadata = "null"; + } + Http.MultipartFormData.FilePart file = request().body().asMultipartFormData().getFile("file"); + if ((file == null || ((File) file.getFile()).length() == 0)) { + throw new IllegalArgumentException("'file' file cannot be empty"); + } + ModelApiResponse obj = imp.uploadFileWithRequiredFile(petId, file, additionalMetadata); + if (configuration.getBoolean("useOutputBeanValidation")) { + OpenAPIUtils.validate(obj); + } + JsonNode result = mapper.valueToTree(obj); + return ok(result); + } } diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImp.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImp.java index 2cd201c4bc35..85e0c60ef6cf 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImp.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImp.java @@ -56,4 +56,10 @@ public ModelApiResponse uploadFile(Long petId, String additionalMetadata, Http.M return new ModelApiResponse(); } + @Override + public ModelApiResponse uploadFileWithRequiredFile(Long petId, Http.MultipartFormData.FilePart file, String additionalMetadata) throws Exception { + //Do your magic!!! + return new ModelApiResponse(); + } + } diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImpInterface.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImpInterface.java index 961632675800..1a87f77ac02c 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImpInterface.java +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/controllers/PetApiControllerImpInterface.java @@ -29,4 +29,6 @@ public interface PetApiControllerImpInterface { ModelApiResponse uploadFile(Long petId, String additionalMetadata, Http.MultipartFormData.FilePart file) throws Exception; + ModelApiResponse uploadFileWithRequiredFile(Long petId, Http.MultipartFormData.FilePart file, String additionalMetadata) throws Exception; + } diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/conf/routes b/samples/server/petstore/java-play-framework-fake-endpoints/conf/routes index de7b52199cbe..08762f3f8ebd 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/conf/routes +++ b/samples/server/petstore/java-play-framework-fake-endpoints/conf/routes @@ -13,6 +13,7 @@ POST /v2/fake/outer/boolean controllers.FakeApiControlle POST /v2/fake/outer/composite controllers.FakeApiController.fakeOuterCompositeSerialize() POST /v2/fake/outer/number controllers.FakeApiController.fakeOuterNumberSerialize() POST /v2/fake/outer/string controllers.FakeApiController.fakeOuterStringSerialize() +PUT /v2/fake/body-with-file-schema controllers.FakeApiController.testBodyWithFileSchema() PUT /v2/fake/body-with-query-params controllers.FakeApiController.testBodyWithQueryParams() PATCH /v2/fake controllers.FakeApiController.testClientModel() POST /v2/fake controllers.FakeApiController.testEndpointParameters() @@ -32,6 +33,7 @@ GET /v2/pet/:petId controllers.PetApiController.getPetBy PUT /v2/pet controllers.PetApiController.updatePet() POST /v2/pet/:petId controllers.PetApiController.updatePetWithForm(petId: Long) POST /v2/pet/:petId/uploadImage controllers.PetApiController.uploadFile(petId: Long) +POST /v2/fake/:petId/uploadImageWithRequiredFile controllers.PetApiController.uploadFileWithRequiredFile(petId: Long) #Functions for Store API DELETE /v2/store/order/:orderId controllers.StoreApiController.deleteOrder(orderId: String) diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/public/openapi.json b/samples/server/petstore/java-play-framework-fake-endpoints/public/openapi.json index 1fb6f6037ebc..6a55a7238e00 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/public/openapi.json +++ b/samples/server/petstore/java-play-framework-fake-endpoints/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", @@ -833,12 +835,14 @@ "name" : "enum_header_string_array", "in" : "header", "description" : "Header parameter enum test (string array)", + "style" : "simple", + "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "$", - "enum" : [ ">", "$" ] + "enum" : [ ">", "$" ], + "default" : "$" } } }, { @@ -847,20 +851,21 @@ "description" : "Header parameter enum test (string)", "schema" : { "type" : "string", - "default" : "-efg", - "enum" : [ "_abc", "-efg", "(xyz)" ] + "enum" : [ "_abc", "-efg", "(xyz)" ], + "default" : "-efg" } }, { "name" : "enum_query_string_array", "in" : "query", "description" : "Query parameter enum test (string array)", + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "$", - "enum" : [ ">", "$" ] + "enum" : [ ">", "$" ], + "default" : "$" } } }, { @@ -869,8 +874,8 @@ "description" : "Query parameter enum test (string)", "schema" : { "type" : "string", - "default" : "-efg", - "enum" : [ "_abc", "-efg", "(xyz)" ] + "enum" : [ "_abc", "-efg", "(xyz)" ], + "default" : "-efg" } }, { "name" : "enum_query_integer", @@ -901,15 +906,15 @@ "description" : "Form parameter enum test (string array)", "items" : { "type" : "string", - "default" : "$", - "enum" : [ ">", "$" ] + "enum" : [ ">", "$" ], + "default" : "$" } }, "enum_form_string" : { "type" : "string", "description" : "Form parameter enum test (string)", - "default" : "-efg", - "enum" : [ "_abc", "-efg", "(xyz)" ] + "enum" : [ "_abc", "-efg", "(xyz)" ], + "default" : "-efg" } } } @@ -1328,6 +1333,86 @@ "x-contentType" : "application/json", "x-accepts" : "application/json" } + }, + "/fake/body-with-file-schema" : { + "put" : { + "tags" : [ "fake" ], + "description" : "For this test, the body for this request much reference a schema named `File`.", + "operationId" : "testBodyWithFileSchema", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/FileSchemaTestClass" + } + } + }, + "required" : true + }, + "responses" : { + "200" : { + "description" : "Success", + "content" : { } + } + }, + "x-contentType" : "application/json", + "x-accepts" : "application/json" + } + }, + "/fake/{petId}/uploadImageWithRequiredFile" : { + "post" : { + "tags" : [ "pet" ], + "summary" : "uploads an image (required)", + "operationId" : "uploadFileWithRequiredFile", + "parameters" : [ { + "name" : "petId", + "in" : "path", + "description" : "ID of pet to update", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" + } + } ], + "requestBody" : { + "content" : { + "multipart/form-data" : { + "schema" : { + "required" : [ "file" ], + "properties" : { + "additionalMetadata" : { + "type" : "string", + "description" : "Additional data to pass to server" + }, + "file" : { + "type" : "string", + "description" : "file to upload", + "format" : "binary" + } + } + } + } + }, + "required" : true + }, + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ApiResponse" + } + } + } + } + }, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ], + "x-contentType" : "multipart/form-data", + "x-accepts" : "application/json" + } } }, "components" : { @@ -1502,8 +1587,8 @@ }, "EnumClass" : { "type" : "string", - "default" : "-efg", - "enum" : [ "_abc", "-efg", "(xyz)" ] + "enum" : [ "_abc", "-efg", "(xyz)" ], + "default" : "-efg" }, "List" : { "type" : "object", @@ -1740,16 +1825,21 @@ "type" : "object", "properties" : { "my_number" : { - "$ref" : "#/components/schemas/OuterNumber" + "type" : "number" }, "my_string" : { - "$ref" : "#/components/schemas/OuterString" + "type" : "string" }, "my_boolean" : { - "$ref" : "#/components/schemas/OuterBoolean" + "type" : "boolean", + "x-codegen-body-parameter-name" : "boolean_post_body" } }, - "example" : { } + "example" : { + "my_string" : "my_string", + "my_number" : 0.80082819046101150206595775671303272247314453125, + "my_boolean" : true + } }, "format_test" : { "required" : [ "byte", "date", "number", "password" ], @@ -1852,6 +1942,30 @@ "type" : "boolean", "x-codegen-body-parameter-name" : "boolean_post_body" }, + "FileSchemaTestClass" : { + "type" : "object", + "properties" : { + "file" : { + "$ref" : "#/components/schemas/File" + }, + "files" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/File" + } + } + }, + "example" : { + "file" : { + "sourceURI" : "sourceURI" + }, + "files" : [ { + "sourceURI" : "sourceURI" + }, { + "sourceURI" : "sourceURI" + } ] + } + }, "Animal" : { "required" : [ "className" ], "type" : "object", @@ -1868,6 +1982,12 @@ "propertyName" : "className" } }, + "StringBooleanMap" : { + "type" : "object", + "additionalProperties" : { + "type" : "boolean" + } + }, "Cat" : { "allOf" : [ { "$ref" : "#/components/schemas/Animal" @@ -1898,6 +2018,15 @@ "type" : "string", "enum" : [ "UPPER", "lower" ] } + }, + "direct_map" : { + "type" : "object", + "additionalProperties" : { + "type" : "boolean" + } + }, + "indirect_map" : { + "$ref" : "#/components/schemas/StringBooleanMap" } } }, @@ -1926,6 +2055,18 @@ "$ref" : "#/components/schemas/Animal" } }, + "File" : { + "type" : "object", + "properties" : { + "sourceURI" : { + "type" : "string", + "description" : "Test capitalization" + } + }, + "example" : { + "sourceURI" : "sourceURI" + } + }, "Pet" : { "required" : [ "name", "photoUrls" ], "type" : "object", diff --git a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-bean-validation/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-no-bean-validation/app/apimodels/Order.java index 2290a967e4b9..a142a5974261 100644 --- a/samples/server/petstore/java-play-framework-no-bean-validation/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-no-bean-validation/app/apimodels/Order.java @@ -156,7 +156,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-no-bean-validation/public/openapi.json b/samples/server/petstore/java-play-framework-no-bean-validation/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-no-bean-validation/public/openapi.json +++ b/samples/server/petstore/java-play-framework-no-bean-validation/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-exception-handling/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-no-exception-handling/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-no-exception-handling/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-no-exception-handling/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-no-exception-handling/public/openapi.json b/samples/server/petstore/java-play-framework-no-exception-handling/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-no-exception-handling/public/openapi.json +++ b/samples/server/petstore/java-play-framework-no-exception-handling/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-interface/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-no-interface/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-no-interface/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-no-interface/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-no-interface/public/openapi.json b/samples/server/petstore/java-play-framework-no-interface/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-no-interface/public/openapi.json +++ b/samples/server/petstore/java-play-framework-no-interface/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-swagger-ui/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-no-swagger-ui/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-no-swagger-ui/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-no-swagger-ui/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-wrap-calls/app/apimodels/Order.java b/samples/server/petstore/java-play-framework-no-wrap-calls/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework-no-wrap-calls/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework-no-wrap-calls/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework-no-wrap-calls/public/openapi.json b/samples/server/petstore/java-play-framework-no-wrap-calls/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework-no-wrap-calls/public/openapi.json +++ b/samples/server/petstore/java-play-framework-no-wrap-calls/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION index 096bf47efe31..dde25ef08e8c 100644 --- a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework/app/apimodels/Order.java b/samples/server/petstore/java-play-framework/app/apimodels/Order.java index cdc21f722c9c..d1aaa38d0029 100644 --- a/samples/server/petstore/java-play-framework/app/apimodels/Order.java +++ b/samples/server/petstore/java-play-framework/app/apimodels/Order.java @@ -158,7 +158,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - public Boolean isComplete() { + public Boolean getComplete() { return complete; } diff --git a/samples/server/petstore/java-play-framework/public/openapi.json b/samples/server/petstore/java-play-framework/public/openapi.json index d72aeb9f185a..ac1d45047828 100644 --- a/samples/server/petstore/java-play-framework/public/openapi.json +++ b/samples/server/petstore/java-play-framework/public/openapi.json @@ -108,13 +108,14 @@ "in" : "query", "description" : "Status values that need to be considered for filter", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", "items" : { "type" : "string", - "default" : "available", - "enum" : [ "available", "pending", "sold" ] + "enum" : [ "available", "pending", "sold" ], + "default" : "available" } } } ], @@ -162,6 +163,7 @@ "in" : "query", "description" : "Tags to filter by", "required" : true, + "style" : "form", "explode" : false, "schema" : { "type" : "array", diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/model/Animal.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/model/Animal.java index 56ac6a180fdf..5bc21a6e60b8 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/model/Animal.java @@ -13,7 +13,8 @@ /** * Animal */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true ) + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat"), From 7ef94686749d5bac28f0a273cdbf021e0eb1d45c Mon Sep 17 00:00:00 2001 From: 0v1se Date: Thu, 12 Jul 2018 10:37:00 +0300 Subject: [PATCH 7/7] https://github.com/OpenAPITools/openapi-generator/issues/417 update all java samples --- .../model/FileSchemaTestClass.java | 98 ++++++++++++++++ .../openapitools/model/StringBooleanMap.java | 51 +++++++++ .../app/apimodels/FileSchemaTestClass.java | 108 ++++++++++++++++++ .../app/apimodels/StringBooleanMap.java | 54 +++++++++ 4 files changed, 311 insertions(+) create mode 100644 samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/FileSchemaTestClass.java create mode 100644 samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/StringBooleanMap.java create mode 100644 samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/FileSchemaTestClass.java create mode 100644 samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/StringBooleanMap.java diff --git a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/FileSchemaTestClass.java new file mode 100644 index 000000000000..c02bc42218b7 --- /dev/null +++ b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -0,0 +1,98 @@ +package org.openapitools.model; + +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.ArrayList; +import java.util.List; + + + + + + +public class FileSchemaTestClass { + @JsonProperty("file") + private java.io.File file = null; + + @JsonProperty("files") + private List files = null; + + /** + **/ + public FileSchemaTestClass file(java.io.File file) { + this.file = file; + return this; + } + + + @ApiModelProperty(value = "") + @JsonProperty("file") + public java.io.File getFile() { + return file; + } + public void setFile(java.io.File file) { + this.file = file; + } + + /** + **/ + public FileSchemaTestClass files(List files) { + this.files = files; + return this; + } + + + @ApiModelProperty(value = "") + @JsonProperty("files") + public List getFiles() { + return files; + } + public void setFiles(List files) { + this.files = files; + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o; + return Objects.equals(file, fileSchemaTestClass.file) && + Objects.equals(files, fileSchemaTestClass.files); + } + + @Override + public int hashCode() { + return Objects.hash(file, files); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FileSchemaTestClass {\n"); + + sb.append(" file: ").append(toIndentedString(file)).append("\n"); + sb.append(" files: ").append(toIndentedString(files)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/StringBooleanMap.java b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/StringBooleanMap.java new file mode 100644 index 000000000000..b1d676bbff26 --- /dev/null +++ b/samples/server/petstore/java-inflector/src/gen/java/org/openapitools/model/StringBooleanMap.java @@ -0,0 +1,51 @@ +package org.openapitools.model; + +import java.util.Objects; +import java.util.HashMap; +import java.util.Map; + + + + + + +public class StringBooleanMap extends HashMap { + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StringBooleanMap stringBooleanMap = (StringBooleanMap) o; + return true; + } + + @Override + public int hashCode() { + return Objects.hash(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StringBooleanMap {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/FileSchemaTestClass.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/FileSchemaTestClass.java new file mode 100644 index 000000000000..d01ed397a32e --- /dev/null +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/FileSchemaTestClass.java @@ -0,0 +1,108 @@ +package apimodels; + +import java.util.ArrayList; +import java.util.List; +import com.fasterxml.jackson.annotation.*; +import java.util.Set; +import javax.validation.*; +import java.util.Objects; +import javax.validation.constraints.*; +/** + * FileSchemaTestClass + */ + +@SuppressWarnings({"UnusedReturnValue", "WeakerAccess"}) +public class FileSchemaTestClass { + @JsonProperty("file") + private java.io.File file = null; + + @JsonProperty("files") + private List files = null; + + public FileSchemaTestClass file(java.io.File file) { + this.file = file; + return this; + } + + /** + * Get file + * @return file + **/ + @Valid + public java.io.File getFile() { + return file; + } + + public void setFile(java.io.File file) { + this.file = file; + } + + public FileSchemaTestClass files(List files) { + this.files = files; + return this; + } + + public FileSchemaTestClass addFilesItem(java.io.File filesItem) { + if (files == null) { + files = new ArrayList<>(); + } + files.add(filesItem); + return this; + } + + /** + * Get files + * @return files + **/ + @Valid + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o; + return Objects.equals(file, fileSchemaTestClass.file) && + Objects.equals(files, fileSchemaTestClass.files); + } + + @Override + public int hashCode() { + return Objects.hash(file, files); + } + + @SuppressWarnings("StringBufferReplaceableByString") + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FileSchemaTestClass {\n"); + + sb.append(" file: ").append(toIndentedString(file)).append("\n"); + sb.append(" files: ").append(toIndentedString(files)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/StringBooleanMap.java b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/StringBooleanMap.java new file mode 100644 index 000000000000..94aabc843569 --- /dev/null +++ b/samples/server/petstore/java-play-framework-fake-endpoints/app/apimodels/StringBooleanMap.java @@ -0,0 +1,54 @@ +package apimodels; + +import java.util.HashMap; +import java.util.Map; +import com.fasterxml.jackson.annotation.*; +import java.util.Set; +import javax.validation.*; +import java.util.Objects; +import javax.validation.constraints.*; +/** + * StringBooleanMap + */ + +@SuppressWarnings({"UnusedReturnValue", "WeakerAccess"}) +public class StringBooleanMap extends HashMap { + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @SuppressWarnings("StringBufferReplaceableByString") + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StringBooleanMap {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} +