From f31712b42e78bda1db3039995b234c17366c6e85 Mon Sep 17 00:00:00 2001 From: "Sebastien Rosset (serosset)" <serosset@cisco.com> Date: Wed, 1 Apr 2020 22:29:36 -0700 Subject: [PATCH 1/5] Add documentation and new getValidDiscriminatorMappings function --- .../openapitools/codegen/CodegenModel.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) 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 36557914bb1..0de629a34ea 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 @@ -22,6 +22,9 @@ import io.swagger.v3.oas.models.ExternalDocumentation; import java.util.*; +/** + * CodegenModel represents a schema object in a OpenAPI document. + */ @JsonIgnoreProperties({"parentModel", "interfaceModels"}) public class CodegenModel implements IJsonSchemaValidationProperties { // The parent model name from the schemas. The parent is determined by inspecting the allOf, anyOf and @@ -195,6 +198,11 @@ public class CodegenModel implements IJsonSchemaValidationProperties { this.description = description; } + /** + * Returns the discriminator for this schema object, or null if no discriminator has been specified. + * + * @return the discriminator. + */ public CodegenDiscriminator getDiscriminator() { return discriminator; } @@ -203,6 +211,25 @@ public class CodegenModel implements IJsonSchemaValidationProperties { this.discriminator = discriminator; } + /** + * Returns a list of allowed discriminator mapping values for this schema object. + * + * @return the list of allowed discriminator mapping values. + */ + public List<String> getValidDiscriminatorMappings() { + List<String> mappingValues = new ArrayList<String>(); + for (CodegenDiscriminator.MappedModel mm : discriminator.getMappedModels()) { + if (name.equals(mm.getModelName())) { + mappingValues.add(mm.getMappingName()); + } + } + return mappingValues; + } + + /** + * Returns the name of the discriminator property for this schema in the OpenAPI document. + * @return the name of the discriminator property. + */ public String getDiscriminatorName() { return discriminator == null ? null : discriminator.getPropertyName(); } -- GitLab From bf53e4f5b4106d46aaae85dd9d023bf89bedc082 Mon Sep 17 00:00:00 2001 From: "Sebastien Rosset (serosset)" <serosset@cisco.com> Date: Wed, 1 Apr 2020 22:47:28 -0700 Subject: [PATCH 2/5] Add documentation and new getValidDiscriminatorMappings function --- .../openapitools/codegen/CodegenModel.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) 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 0de629a34ea..8effdf79e1b 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 @@ -214,6 +214,40 @@ public class CodegenModel implements IJsonSchemaValidationProperties { /** * Returns a list of allowed discriminator mapping values for this schema object. * + * The list of all possible schema discriminator mapping values is obtained + * from explicit discriminator mapping values in the OpenAPI document, and from + * inherited discriminators through oneOf, allOf, anyOf. + * For example, a discriminator may be defined in a 'Pet' schema as shown below. + * The Dog and Cat schemas inherit the discriminator through the allOf reference. + * In the 'Pet' schema, the supported discriminator mapping values for the + * 'objectType' properties are 'Dog' and 'Cat'. + * The allowed discriminator mapping value for the Dog schema is 'Dog'. + * The allowed discriminator mapping value for the Cat schema is 'Dog'. + * + * Pet: + * type: object + * discriminator: + * propertyName: objectType + * required: + * - objectType + * properties: + * objectType: + * type: string + * Dog: + * allOf: + * - $ref: '#/components/schemas/Pet' + * - type: object + * properties: + * p1: + * type: string + * Cat: + * allOf: + * - $ref: '#/components/schemas/Pet' + * - type: object + * properties: + * p2: + * type: string + * * @return the list of allowed discriminator mapping values. */ public List<String> getValidDiscriminatorMappings() { -- GitLab From dc395481a96c28dbbbbeebe72f55c6cb9a7b4680 Mon Sep 17 00:00:00 2001 From: "Sebastien Rosset (serosset)" <serosset@cisco.com> Date: Wed, 1 Apr 2020 22:51:04 -0700 Subject: [PATCH 3/5] Add documentation and new getValidDiscriminatorMappings function --- .../src/main/java/org/openapitools/codegen/CodegenModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8effdf79e1b..1458b3736b2 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 @@ -250,7 +250,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { * * @return the list of allowed discriminator mapping values. */ - public List<String> getValidDiscriminatorMappings() { + public List<String> getAllowedDiscriminatorMappingValues() { List<String> mappingValues = new ArrayList<String>(); for (CodegenDiscriminator.MappedModel mm : discriminator.getMappedModels()) { if (name.equals(mm.getModelName())) { -- GitLab From af27e33c159e08ab443ea0c4b50e4df928188879 Mon Sep 17 00:00:00 2001 From: "Sebastien Rosset (serosset)" <serosset@cisco.com> Date: Thu, 2 Apr 2020 07:42:37 -0700 Subject: [PATCH 4/5] Add documentation and new getValidDiscriminatorMappings function --- .../src/main/java/org/openapitools/codegen/CodegenModel.java | 4 ++++ 1 file changed, 4 insertions(+) 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 1458b3736b2..dd41cf05083 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 @@ -262,6 +262,10 @@ public class CodegenModel implements IJsonSchemaValidationProperties { /** * Returns the name of the discriminator property for this schema in the OpenAPI document. + * In the OpenAPI document, the discriminator may be specified in the local schema or + * it may be inherited, such as through a 'allOf' schema which references another schema + * that has a discriminator, recursively. + * * @return the name of the discriminator property. */ public String getDiscriminatorName() { -- GitLab From bacb663dfff4928bef935408443660ce26992f55 Mon Sep 17 00:00:00 2001 From: "Sebastien Rosset (serosset)" <serosset@cisco.com> Date: Thu, 2 Apr 2020 08:48:07 -0700 Subject: [PATCH 5/5] add documentation --- .../java/org/openapitools/codegen/CodegenDiscriminator.java | 1 + .../src/main/java/org/openapitools/codegen/CodegenModel.java | 5 +++++ 2 files changed, 6 insertions(+) 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 73d85052e70..baa91fb2209 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 @@ -11,6 +11,7 @@ public class CodegenDiscriminator { private String propertyName; private String propertyBaseName; private String propertyGetter; + // The implementation type for the language generator being executed. private String propertyType; private Map<String, String> mapping; private Set<MappedModel> mappedModels = new LinkedHashSet<>(); 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 dd41cf05083..4739b1cec27 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 @@ -201,6 +201,11 @@ public class CodegenModel implements IJsonSchemaValidationProperties { /** * Returns the discriminator for this schema object, or null if no discriminator has been specified. * + * The returned value is null if no discriminator is defined for this local schema. + * The value is also null when the discriminators are inherited through references in the + * OpenAPI document. For example, a schema may have a 'allOf' attribute and the allOf + * referenced children define a discriminator, recursively. + * * @return the discriminator. */ public CodegenDiscriminator getDiscriminator() { -- GitLab