From 1f4cbb8f00d360e6ab9b2712ba33990e986a3a48 Mon Sep 17 00:00:00 2001 From: Beppe Catanese <1771700+gcatanese@users.noreply.github.com> Date: Fri, 26 May 2023 03:20:22 +0200 Subject: [PATCH] Add multiple parameter examples to CodegenParameter (#15647) * Add examples to CodegenParameter * Set CodegenParameter examples * Add examples to CodegenParameter * Set CodegenParameter examples * Regeneration samples --- .../org/openapitools/codegen/CodegenParameter.java | 8 +++++++- .../org/openapitools/codegen/DefaultCodegen.java | 14 ++++++++++++++ .../openapitools/codegen/DefaultCodegenTest.java | 4 +++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index 2b260189fd3..3e64ee516a0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -17,6 +17,8 @@ package org.openapitools.codegen; +import io.swagger.v3.oas.models.examples.Example; + import java.util.*; /** @@ -33,6 +35,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { public String nameInLowerCase; // property name in lower case public String example; // example value (x-example) + public Map examples; public String jsonSchema; public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject, isAnyType, isShort, isUnboundedInteger; @@ -159,6 +162,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { output.defaultValue = this.defaultValue; output.enumDefaultValue = this.enumDefaultValue; output.example = this.example; + output.examples = this.examples; output.isEnum = this.isEnum; output.isEnumRef = this.isEnumRef; output.maxProperties = this.maxProperties; @@ -249,7 +253,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { @Override public int hashCode() { - return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumDefaultValue, enumName, style, isDeepObject, isAllowEmptyValue, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, isEnumRef, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, isDeprecated, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, isVoid, additionalPropertiesIsAnyType, hasVars, hasRequired, isShort, isUnboundedInteger, hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, schema, content, requiredVarsMap, ref, uniqueItemsBoolean, schemaIsFromAdditionalProperties); + return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumDefaultValue, enumName, style, isDeepObject, isAllowEmptyValue, example, examples, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, isEnumRef, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, isDeprecated, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, isVoid, additionalPropertiesIsAnyType, hasVars, hasRequired, isShort, isUnboundedInteger, hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, schema, content, requiredVarsMap, ref, uniqueItemsBoolean, schemaIsFromAdditionalProperties); } @Override @@ -331,6 +335,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { Objects.equals(isDeepObject, that.isDeepObject) && Objects.equals(isAllowEmptyValue, that.isAllowEmptyValue) && Objects.equals(example, that.example) && + Objects.equals(examples, that.examples) && Objects.equals(jsonSchema, that.jsonSchema) && Objects.equals(_enum, that._enum) && Objects.equals(allowableValues, that.allowableValues) && @@ -392,6 +397,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { sb.append(", deepObject='").append(isDeepObject).append('\''); sb.append(", allowEmptyValue='").append(isAllowEmptyValue).append('\''); sb.append(", example='").append(example).append('\''); + sb.append(", examples='").append(examples).append('\''); sb.append(", jsonSchema='").append(jsonSchema).append('\''); sb.append(", isString=").append(isString); sb.append(", isNumeric=").append(isNumeric); 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 0a3bdeb357d..d4576c2ff95 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 @@ -2023,6 +2023,18 @@ public class DefaultCodegen implements CodegenConfig { setParameterExampleValue(codegenParameter); } + /** + * Return the examples of the parameter. + * + * @param codegenParameter Codegen parameter + * @param parameter Parameter + */ + public void setParameterExamples(CodegenParameter codegenParameter, Parameter parameter) { + if (parameter.getExamples() != null && !parameter.getExamples().isEmpty()) { + codegenParameter.examples = parameter.getExamples(); + } + } + /** * Return the example value of the parameter. * @@ -4880,6 +4892,8 @@ public class DefaultCodegen implements CodegenConfig { // set the parameter example value // should be overridden by lang codegen setParameterExampleValue(codegenParameter, parameter); + // set the parameter examples (if available) + setParameterExamples(codegenParameter, parameter); postProcessParameter(codegenParameter); LOGGER.debug("debugging codegenParameter return: {}", codegenParameter); 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 f9e7a8e9b03..a6a6720a921 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 @@ -862,8 +862,10 @@ public class DefaultCodegenTest { Operation operation2 = openAPI.getPaths().get("/example1/plural").getGet(); CodegenParameter codegenParameter2 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); codegen.setParameterExampleValue(codegenParameter2, operation2.getParameters().get(0)); - Assert.assertEquals(codegenParameter2.example, "An example1 value"); + // verify examples are available + codegen.setParameterExamples(codegenParameter2, operation2.getParameters().get(0)); + Assert.assertEquals(codegenParameter2.examples.size(), 1); } @Test