From 8b88ad3216c1978e324e1ade6bc6fc75f079883e Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:22:35 -0400 Subject: [PATCH 01/15] Add optValue to CliOption --- .../main/java/org/openapitools/codegen/CliOption.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java index 0854b2e8593c..b6d95b4fa6f2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java @@ -28,6 +28,7 @@ public class CliOption { private String description; private String type; private String defaultValue; + private String optValue; private Map enumValues; public CliOption(String opt, String description) { @@ -73,6 +74,15 @@ public CliOption defaultValue(String defaultValue) { return this; } + public String getOptValue() { return this.optValue;} + public void setOptValue(String optValue) { + if (this.enumValues!=null && this.enumValues.containsKey(optValue)) { + this.optValue = optValue; + } else { + this.optValue = null; + } + } + public CliOption addEnum(String value, String description) { if (this.enumValues == null) { this.enumValues = new LinkedHashMap(); From 7c0e560341b843a9847a3da0106d61c0ca430924 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:23:42 -0400 Subject: [PATCH 02/15] Use CliOption for classModifier, operationModifier, buildTarget, add ASP.Net core 2.2 --- .../languages/AspNetCoreServerCodegen.java | 179 ++++++++++-------- 1 file changed, 99 insertions(+), 80 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index fe4bce79ae39..c308d74729e1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -19,10 +19,7 @@ import com.samskivert.mustache.Mustache; import io.swagger.v3.oas.models.OpenAPI; -import org.openapitools.codegen.CodegenConstants; -import org.openapitools.codegen.CodegenOperation; -import org.openapitools.codegen.CodegenType; -import org.openapitools.codegen.SupportingFile; +import org.openapitools.codegen.*; import org.openapitools.codegen.utils.URLPathUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,12 +53,11 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { private boolean useSwashbuckle = true; protected int serverPort = 8080; protected String serverHost = "0.0.0.0"; - protected String aspnetCoreVersion= "2.1"; // default to 2.1 - // TODO Make next two enums toensure fixed list. - private String classModifier = ""; - private String operationModifier = "virtual"; + protected CliOption aspnetCoreVersion= new CliOption(ASPNET_CORE_VERSION,"ASP.NET Core version: 2.2 (default), 2.1, 2.0 (deprecated)");; // default to 2.1 + private CliOption classModifier = new CliOption(CLASS_MODIFIER,"Class Modifier can be empty, abstract"); + private CliOption operationModifier = new CliOption(OPERATION_MODIFIER, "Operation Modifier can be virtual, abstract or partial"); private boolean generateBody = true; - private String buildTarget = "program"; + private CliOption buildTarget = new CliOption("buildTarget", "Target to build an application or library"); private String projectSdk = SDK_WEB; public AspNetCoreServerCodegen() { @@ -119,9 +115,12 @@ public AspNetCoreServerCodegen() { CodegenConstants.SOURCE_FOLDER_DESC, sourceFolder); - addOption(ASPNET_CORE_VERSION, - "ASP.NET Core version: 2.1 (default), 2.0 (deprecated)", - aspnetCoreVersion); + aspnetCoreVersion.addEnum("2.0", "ASP.NET COre V2.0"); + aspnetCoreVersion.addEnum("2.1", "ASP.NET COre V2.1"); + aspnetCoreVersion.addEnum("2.2", "ASP.NET COre V2.2"); + aspnetCoreVersion.setDefault("2.2"); + aspnetCoreVersion.setOptValue(aspnetCoreVersion.getDefault()); + addOption(aspnetCoreVersion.getOpt(),aspnetCoreVersion.getDescription(),aspnetCoreVersion.getOptValue()); // CLI Switches addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, @@ -144,22 +143,28 @@ public AspNetCoreServerCodegen() { "Uses the Swashbuckle.AspNetCore NuGet package for documentation.", useSwashbuckle); - addOption(CLASS_MODIFIER, - "Class modifiers such as abstract or partial", - classModifier); + classModifier.addEnum("", "Keep class default with no modifier"); + classModifier.addEnum("abstract", "Make class abstract"); + classModifier.setDefault(""); + classModifier.setOptValue(classModifier.getDefault()); + addOption(classModifier.getOpt(),classModifier.getDescription(),classModifier.getOptValue()); - addOption(OPERATION_MODIFIER, - "Operation modifiers such as virtual or abstract.", - operationModifier); + operationModifier.addEnum("virtual", "Keep method virtual "); + operationModifier.addEnum("abstract", "Make method abstract"); + operationModifier.setDefault("virtual"); + operationModifier.setOptValue(operationModifier.getDefault()); + addOption(operationModifier.getOpt(),operationModifier.getDescription(),operationModifier.getOptValue()); + + buildTarget.addEnum("program", "Generate code for standalone server"); + buildTarget.addEnum("library", "Generate code for a server abstract class lbrary"); + buildTarget.setDefault("program"); + buildTarget.setOptValue(buildTarget.getDefault()); + addOption(buildTarget.getOpt(),buildTarget.getDescription(),buildTarget.getOptValue()); addSwitch(GENERATE_BODY, "Generates method body.", generateBody); - addOption(BUILD_TARGET, - "Target the build for a program or library.", - buildTarget); - } @Override @@ -201,53 +206,15 @@ public void processOpts() { additionalProperties.put(USE_SWASHBUCKLE, useSwashbuckle); } - // determine the ASP.NET core version setting - if (additionalProperties.containsKey(ASPNET_CORE_VERSION)) { - setAspnetCoreVersion((String) additionalProperties.get(ASPNET_CORE_VERSION)); - } - - // CHeck for class modifier if not present set the default value. - if (additionalProperties.containsKey(CLASS_MODIFIER)) { - classModifier = additionalProperties.get(CLASS_MODIFIER).toString(); - } else { - additionalProperties.put(CLASS_MODIFIER, classModifier); - } - - // TODO Validate modifier values - // If class modifierier is abstract then the methods need to be abstrat too. - if ("abstract".equals(classModifier)) { - operationModifier = classModifier; - additionalProperties.put(OPERATION_MODIFIER, operationModifier); - } - if (additionalProperties.containsKey(OPERATION_MODIFIER)) { - operationModifier = additionalProperties.get(OPERATION_MODIFIER).toString(); - } else { - additionalProperties.put(OPERATION_MODIFIER, operationModifier); - } + // CHeck for the modifiers etc. + // The order of the checks is important. + isLibrary = setBuildTarget(); + setClassModifier(); + setOperationModifier(); - // TODO Validate modifier values - // If operation modifier is abstract then dont generate any body - if ("abstract".equals(operationModifier)) { - generateBody = false; - additionalProperties.put(GENERATE_BODY, generateBody); - } - if (additionalProperties.containsKey(GENERATE_BODY)) { - generateBody = convertPropertyToBooleanAndWriteBack(GENERATE_BODY); - } else { - additionalProperties.put(GENERATE_BODY, generateBody); - } // CHeck for class modifier if not present set the default value. - if (additionalProperties.containsKey(BUILD_TARGET)) { - buildTarget = additionalProperties.get(BUILD_TARGET).toString(); - } else { - additionalProperties.put(BUILD_TARGET, buildTarget); - } - if ("library".equals(buildTarget)) { - isLibrary = true; - projectSdk = SDK_LIB; - } additionalProperties.put(PROJECT_SDK, projectSdk); additionalProperties.put("dockerTag", packageName.toLowerCase(Locale.ROOT)); @@ -257,17 +224,8 @@ public void processOpts() { String packageFolder = sourceFolder + File.separator + packageName; - if ("2.0".equals(aspnetCoreVersion)) { - embeddedTemplateDir = templateDir = "aspnetcore/2.0"; - supportingFiles.add(new SupportingFile("web.config", packageFolder, "web.config")); - LOGGER.info("ASP.NET core version: 2.0"); - } else if ("2.1".equals(aspnetCoreVersion)) { - // default, do nothing - LOGGER.info("ASP.NET core version: 2.1"); - } else { - throw new IllegalArgumentException("aspnetCoreVersion must be '2.1', '2.0' but found " + aspnetCoreVersion); - } - + // determine the ASP.NET core version setting + setAspnetCoreVersion(packageFolder); supportingFiles.add(new SupportingFile("build.sh.mustache", "", "build.sh")); supportingFiles.add(new SupportingFile("build.bat.mustache", "", "build.bat")); @@ -328,10 +286,6 @@ public void setPackageGuid(String packageGuid) { this.packageGuid = packageGuid; } - public void setAspnetCoreVersion(String aspnetCoreVersion) { - this.aspnetCoreVersion= aspnetCoreVersion; - } - @Override public String apiFileFolder() { return outputFolder + File.separator + sourceFolder + File.separator + packageName + File.separator + "Controllers"; @@ -375,4 +329,69 @@ public Mustache.Compiler processCompiler(Mustache.Compiler compiler) { public String toRegularExpression(String pattern) { return escapeText(pattern); } + + private void setCliOption(CliOption cliOption) throws IllegalArgumentException { + if (additionalProperties.containsKey(cliOption.getOpt())) { + cliOption.setOptValue(additionalProperties.get(cliOption.getOpt()).toString()); + if (classModifier.getOptValue() == null) { + cliOption.setOptValue(cliOption.getDefault()); + throw new IllegalArgumentException(cliOption.getOpt() + ": Invalid value '" + additionalProperties.get(cliOption.getOpt()).toString() + "'" + + ". " + cliOption.getDescription()); + } + } else { + additionalProperties.put(cliOption.getOpt(), cliOption.getOptValue()); + } + } + + private void setClassModifier() { + // CHeck for class modifier if not present set the default value. + setCliOption(classModifier); + + // If class modifier is abstract then the methods need to be abstract too. + if ("abstract".equals(classModifier.getOptValue())) { + operationModifier.setOptValue(classModifier.getOptValue()); + additionalProperties.put(OPERATION_MODIFIER, operationModifier.getOptValue()); + LOGGER.warn("classModifier is " + classModifier.getOptValue() + " so forcing operatonModifier to "+ operationModifier.getOptValue()); + } else { + setCliOption(operationModifier); + } + } + + private void setOperationModifier() { + setCliOption(operationModifier); + + // If operation modifier is abstract then dont generate any body + if ("abstract".equals(operationModifier.getOptValue())) { + generateBody = false; + additionalProperties.put(GENERATE_BODY, generateBody); + LOGGER.warn("operationModifier is " + operationModifier.getOptValue() + " so forcing generateBody to "+ generateBody); + } else if (additionalProperties.containsKey(GENERATE_BODY)) { + generateBody = convertPropertyToBooleanAndWriteBack(GENERATE_BODY); + } else { + additionalProperties.put(GENERATE_BODY, generateBody); + } + } + + private boolean setBuildTarget() { + boolean isLibrary = false; + setCliOption(buildTarget); + if ("library".equals(buildTarget)) { + isLibrary = true; + projectSdk = SDK_LIB; + additionalProperties.put(CLASS_MODIFIER, "abstract"); + } + return isLibrary; + } + + private void setAspnetCoreVersion(String packageFolder) { + setCliOption(aspnetCoreVersion); + if ("2.0".equals(aspnetCoreVersion.getOptValue())) { + embeddedTemplateDir = templateDir = "aspnetcore/2.0"; + supportingFiles.add(new SupportingFile("web.config", packageFolder, "web.config")); + LOGGER.info("ASP.NET core version: 2.0"); + } else { + // default, do nothing + LOGGER.info("ASP.NET core version: " + aspnetCoreVersion.getOptValue()); + } + } } From d9ce20208409c0f348a7f9ca5187bcc16097ba49 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:24:20 -0400 Subject: [PATCH 03/15] Make abstract method look cleaner --- .../src/main/resources/aspnetcore/2.1/controller.mustache | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache index 57a4f545f4ba..381d16aabef2 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache @@ -28,7 +28,7 @@ namespace {{packageName}}.Controllers [ValidateModelState]{{#useSwashbuckle}} [SwaggerOperation("{{operationId}}")]{{#responses}}{{#dataType}} [SwaggerResponse(statusCode: {{code}}, type: typeof({{&dataType}}), description: "{{message}}")]{{/dataType}}{{^dataType}}{{/dataType}}{{/responses}}{{/useSwashbuckle}} - public {{operationModifier}} IActionResult {{operationId}}({{#allParams}}{{>pathParam}}{{>queryParam}}{{>bodyParam}}{{>formParam}}{{>headerParam}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + public {{operationModifier}} IActionResult {{operationId}}({{#allParams}}{{>pathParam}}{{>queryParam}}{{>bodyParam}}{{>formParam}}{{>headerParam}}{{#hasMore}}, {{/hasMore}}{{/allParams}}){{^generateBody}};{{/generateBody}} {{#generateBody}} { {{#responses}} {{#dataType}} @@ -51,9 +51,6 @@ namespace {{packageName}}.Controllers throw new NotImplementedException();{{/returnType}} } {{/generateBody}} - {{^generateBody}} - ; - {{/generateBody}} {{/operation}} } {{/operations}} From 99122e179001c3dade50e19648f95f06437f2602 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:24:45 -0400 Subject: [PATCH 04/15] Add ASP.Net core 2.2 --- .../src/main/resources/aspnetcore/2.1/Dockerfile.mustache | 4 ++-- .../src/main/resources/aspnetcore/2.1/Project.csproj.mustache | 2 +- .../src/main/resources/aspnetcore/2.1/Startup.mustache | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Dockerfile.mustache index 391e85846b8d..aa3f404bdce6 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Dockerfile.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Dockerfile.mustache @@ -1,4 +1,4 @@ -FROM microsoft/dotnet:2.1-sdk AS build-env +FROM microsoft/dotnet:{{aspnetCoreVersion}}-sdk AS build-env WORKDIR /app ENV DOTNET_CLI_TELEMETRY_OPTOUT 1 @@ -12,7 +12,7 @@ COPY . ./ RUN dotnet publish -c Release -o out # build runtime image -FROM microsoft/dotnet:2.1-aspnetcore-runtime +FROM microsoft/dotnet:{{aspnetCoreVersion}}-aspnetcore-runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "{{packageName}}.dll"] diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Project.csproj.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Project.csproj.mustache index 0430f24a4a46..296a332ecd97 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Project.csproj.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Project.csproj.mustache @@ -2,7 +2,7 @@ {{packageName}} {{packageName}} - netcoreapp2.1 + netcoreapp{{aspnetCoreVersion}} true true {{packageName}} diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache index 7a488bfcf170..8c2af4dc41a2 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache @@ -43,7 +43,7 @@ namespace {{packageName}} // Add framework services. services .AddMvc() - .SetCompatibilityVersion (CompatibilityVersion.Version_2_1) + .SetCompatibilityVersion ((String.Compare("2.1","{{aspnetCoreVersion}}") == 0)?CompatibilityVersion.Version_2_1:CompatibilityVersion.Version_2_2) .AddJsonOptions(opts => { opts.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); From 5774317020d989283bf1cb1142b4ba18bf87ce98 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:24:59 -0400 Subject: [PATCH 05/15] update docs --- docs/generators/aspnetcore.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 63c1d810c112..f2445f7a427e 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -16,13 +16,13 @@ sidebar_label: aspnetcore |packageVersion|C# package version.| |1.0.0| |packageGuid|The GUID that will be associated with the C# project| |null| |sourceFolder|source folder for generated code| |src| -|aspnetCoreVersion|ASP.NET Core version: 2.1 (default), 2.0 (deprecated)| |2.1| +|aspnetCoreVersion|ASP.NET Core version: 2.2 (default), 2.1, 2.0 (deprecated)| |2.2| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |true| -|classModifier|Class modifiers such as abstract or partial| || -|operationModifier|Operation modifiers such as virtual or abstract.| |virtual| +|classModifier|Class Modifier can be empty, abstract| || +|operationModifier|Operation Modifier can be virtual, abstract or partial| |virtual| +|buildTarget|Target to build an application or library| |program| |generateBody|Generates method body.| |true| -|buildTarget|Target the build for a program or library.| |program| From 7b5c896bbca27491abe37c34506156f633b9300b Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Tue, 19 Mar 2019 12:59:31 -0400 Subject: [PATCH 06/15] Reformat code to meet PR feedback --- .../src/main/java/org/openapitools/codegen/CliOption.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java index b6d95b4fa6f2..45241c9e6377 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java @@ -74,7 +74,9 @@ public CliOption defaultValue(String defaultValue) { return this; } - public String getOptValue() { return this.optValue;} + public String getOptValue() { + return this.optValue; + } public void setOptValue(String optValue) { if (this.enumValues!=null && this.enumValues.containsKey(optValue)) { this.optValue = optValue; From 43aaf9c41a8e2114c27eac4686047bc061a290e3 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Tue, 19 Mar 2019 13:00:44 -0400 Subject: [PATCH 07/15] Fix compilation with ASP.Net Core 2.1 --- .../codegen/languages/AspNetCoreServerCodegen.java | 7 +++++++ .../src/main/resources/aspnetcore/2.1/Startup.mustache | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index c308d74729e1..e4d789a2e0fc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -44,6 +44,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { public static final String PROJECT_SDK = "projectSdk"; public static final String SDK_WEB = "Microsoft.NET.Sdk.Web"; public static final String SDK_LIB = "Microsoft.NET.Sdk"; + public static final String COMPATIBILITY_VERSION = "compatibilityVersion"; private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}"; @@ -59,6 +60,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { private boolean generateBody = true; private CliOption buildTarget = new CliOption("buildTarget", "Target to build an application or library"); private String projectSdk = SDK_WEB; + private String compatibilityVersion = "Version_2_1"; public AspNetCoreServerCodegen() { super(); @@ -115,6 +117,8 @@ public AspNetCoreServerCodegen() { CodegenConstants.SOURCE_FOLDER_DESC, sourceFolder); + addOption(COMPATIBILITY_VERSION, "ASP.Net Core CompatibilityVersion", compatibilityVersion); + aspnetCoreVersion.addEnum("2.0", "ASP.NET COre V2.0"); aspnetCoreVersion.addEnum("2.1", "ASP.NET COre V2.1"); aspnetCoreVersion.addEnum("2.2", "ASP.NET COre V2.2"); @@ -389,9 +393,12 @@ private void setAspnetCoreVersion(String packageFolder) { embeddedTemplateDir = templateDir = "aspnetcore/2.0"; supportingFiles.add(new SupportingFile("web.config", packageFolder, "web.config")); LOGGER.info("ASP.NET core version: 2.0"); + compatibilityVersion = null; } else { // default, do nothing LOGGER.info("ASP.NET core version: " + aspnetCoreVersion.getOptValue()); + compatibilityVersion = "Version_" + aspnetCoreVersion.getOptValue().replace(".","_"); } + additionalProperties.put(COMPATIBILITY_VERSION, compatibilityVersion); } } diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache index 8c2af4dc41a2..f7d0e084937a 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache @@ -43,7 +43,9 @@ namespace {{packageName}} // Add framework services. services .AddMvc() - .SetCompatibilityVersion ((String.Compare("2.1","{{aspnetCoreVersion}}") == 0)?CompatibilityVersion.Version_2_1:CompatibilityVersion.Version_2_2) + {{#compatibilityVersion}} + .SetCompatibilityVersion (CompatibilityVersion.{{compatibilityVersion}}) + {{/compatibilityVersion}} .AddJsonOptions(opts => { opts.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); From b005e98a5e70dd10abef3718cab43decae36ec9e Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Tue, 19 Mar 2019 13:05:22 -0400 Subject: [PATCH 08/15] Update docs --- docs/generators/aspnetcore.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index f2445f7a427e..fdb73387f3f7 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -16,6 +16,7 @@ sidebar_label: aspnetcore |packageVersion|C# package version.| |1.0.0| |packageGuid|The GUID that will be associated with the C# project| |null| |sourceFolder|source folder for generated code| |src| +|compatibilityVersion|ASP.Net Core CompatibilityVersion| |Version_2_1| |aspnetCoreVersion|ASP.NET Core version: 2.2 (default), 2.1, 2.0 (deprecated)| |2.2| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| From d0de0de857ad9b4843ac2067977a3d6c37a479c0 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:22:35 -0400 Subject: [PATCH 09/15] Add optValue to CliOption --- .../src/main/java/org/openapitools/codegen/CliOption.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java index 45241c9e6377..49c8d7143ab9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CliOption.java @@ -77,6 +77,7 @@ public CliOption defaultValue(String defaultValue) { public String getOptValue() { return this.optValue; } + public void setOptValue(String optValue) { if (this.enumValues!=null && this.enumValues.containsKey(optValue)) { this.optValue = optValue; From 752e2e730c62bd409aa1d27873560c237cc973e9 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Mon, 18 Mar 2019 08:24:45 -0400 Subject: [PATCH 10/15] Add ASP.Net core 2.2 --- .../src/main/resources/aspnetcore/2.1/Startup.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache index f7d0e084937a..1e8215a38eff 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache @@ -109,7 +109,7 @@ namespace {{packageName}} // c.SwaggerEndpoint("/openapi-original.json", "{{#appName}}{{{appName}}}{{/appName}}{{^appName}}{{packageName}}{{/appName}} Original"); }){{/useSwashbuckle}}; -if (env.IsDevelopment()) + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } From e60da35390f30bcb05406e8c53a4b08d396c6471 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Tue, 19 Mar 2019 22:39:04 -0400 Subject: [PATCH 11/15] Fix build target error --- .../openapitools/codegen/languages/AspNetCoreServerCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index e4d789a2e0fc..8863f4e07531 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -379,7 +379,7 @@ private void setOperationModifier() { private boolean setBuildTarget() { boolean isLibrary = false; setCliOption(buildTarget); - if ("library".equals(buildTarget)) { + if ("library".equals(buildTarget.getOptValue())) { isLibrary = true; projectSdk = SDK_LIB; additionalProperties.put(CLASS_MODIFIER, "abstract"); From 7205daf750dce81fd6905d47915974e66c58c714 Mon Sep 17 00:00:00 2001 From: A-Joshi Date: Tue, 19 Mar 2019 23:20:27 -0400 Subject: [PATCH 12/15] Remove duplicated code --- .../languages/AspNetCoreServerCodegen.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index 8863f4e07531..47080b75cfac 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -256,26 +256,6 @@ public void processOpts() { supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "openapi-original.mustache", packageFolder + File.separator + "wwwroot", "openapi-original.json")); } - supportingFiles.add(new SupportingFile("validateModel.mustache", packageFolder + File.separator + "Attributes", "ValidateModelStateAttribute.cs")); - supportingFiles.add(new SupportingFile("Project.csproj.mustache", packageFolder, packageName + ".csproj")); - if (!isLibrary) { - supportingFiles.add(new SupportingFile("Dockerfile.mustache", packageFolder, "Dockerfile")); - supportingFiles.add(new SupportingFile("appsettings.json", packageFolder, "appsettings.json")); - - supportingFiles.add(new SupportingFile("Startup.mustache", packageFolder, "Startup.cs")); - supportingFiles.add(new SupportingFile("Program.mustache", packageFolder, "Program.cs")); - supportingFiles.add(new SupportingFile("Properties" + File.separator + "launchSettings.json", - packageFolder + File.separator + "Properties", "launchSettings.json")); - } else { - supportingFiles.add(new SupportingFile("Project.nuspec.mustache", packageFolder, packageName + ".nuspec")); - // wwwroot files. - supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "README.md", packageFolder + File.separator + "wwwroot", "README.md")); - supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "index.html", packageFolder + File.separator + "wwwroot", "index.html")); - supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "web.config", packageFolder + File.separator + "wwwroot", "web.config")); - - supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "openapi-original.mustache", - packageFolder + File.separator + "wwwroot", "openapi-original.json")); - } if (useSwashbuckle) { From 4616900a7a604938b8c088382d5f02f5084589f8 Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Sun, 24 Mar 2019 23:39:03 -0400 Subject: [PATCH 13/15] Fix Startup.cs whitespace --- .../src/main/resources/aspnetcore/2.1/Startup.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache index 1e8215a38eff..ee628b34ca77 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/Startup.mustache @@ -44,7 +44,7 @@ namespace {{packageName}} services .AddMvc() {{#compatibilityVersion}} - .SetCompatibilityVersion (CompatibilityVersion.{{compatibilityVersion}}) + .SetCompatibilityVersion(CompatibilityVersion.{{compatibilityVersion}}) {{/compatibilityVersion}} .AddJsonOptions(opts => { From 6db3a78c4c375d04314aa8bcd0c2163585d12fbc Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Sun, 24 Mar 2019 23:42:58 -0400 Subject: [PATCH 14/15] [aspnetcore] Regenerate sample --- samples/server/petstore/aspnetcore/.openapi-generator/VERSION | 2 +- .../petstore/aspnetcore/src/Org.OpenAPITools/Dockerfile | 4 ++-- .../aspnetcore/src/Org.OpenAPITools/Org.OpenAPITools.csproj | 2 +- .../petstore/aspnetcore/src/Org.OpenAPITools/Startup.cs | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION index 94ae9ee1fa8e..afa636560641 100644 --- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION @@ -1 +1 @@ -4.0.0-SNAPSHOT +4.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Dockerfile b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Dockerfile index dab949644f42..0a5df1723190 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Dockerfile +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Dockerfile @@ -1,4 +1,4 @@ -FROM microsoft/dotnet:2.1-sdk AS build-env +FROM microsoft/dotnet:2.2-sdk AS build-env WORKDIR /app ENV DOTNET_CLI_TELEMETRY_OPTOUT 1 @@ -12,7 +12,7 @@ COPY . ./ RUN dotnet publish -c Release -o out # build runtime image -FROM microsoft/dotnet:2.1-aspnetcore-runtime +FROM microsoft/dotnet:2.2-aspnetcore-runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "Org.OpenAPITools.dll"] diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Org.OpenAPITools.csproj b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Org.OpenAPITools.csproj index 05d9192229fa..3fbf77c6005a 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Org.OpenAPITools.csproj +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Org.OpenAPITools.csproj @@ -2,7 +2,7 @@ Org.OpenAPITools Org.OpenAPITools - netcoreapp2.1 + netcoreapp2.2 true true Org.OpenAPITools diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Startup.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Startup.cs index 0df10a0b0cb7..c8341daef20e 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Startup.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Startup.cs @@ -52,7 +52,7 @@ public void ConfigureServices(IServiceCollection services) // Add framework services. services .AddMvc() - .SetCompatibilityVersion (CompatibilityVersion.Version_2_1) + .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions(opts => { opts.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); @@ -114,7 +114,7 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) // c.SwaggerEndpoint("/openapi-original.json", "OpenAPI Petstore Original"); }); -if (env.IsDevelopment()) + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } From 737d112a9df3fd2eed3d3641b185a7a1fedddbf0 Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Sun, 31 Mar 2019 21:58:46 -0400 Subject: [PATCH 15/15] Fix wrong item in null check for cliOption --- .../openapitools/codegen/languages/AspNetCoreServerCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index 47080b75cfac..88b5cf3480d3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -317,7 +317,7 @@ public String toRegularExpression(String pattern) { private void setCliOption(CliOption cliOption) throws IllegalArgumentException { if (additionalProperties.containsKey(cliOption.getOpt())) { cliOption.setOptValue(additionalProperties.get(cliOption.getOpt()).toString()); - if (classModifier.getOptValue() == null) { + if (cliOption.getOptValue() == null) { cliOption.setOptValue(cliOption.getDefault()); throw new IllegalArgumentException(cliOption.getOpt() + ": Invalid value '" + additionalProperties.get(cliOption.getOpt()).toString() + "'" + ". " + cliOption.getDescription());