From 77c1907f5185011e626b9ea9c2b002d6a6eb1716 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sun, 29 Mar 2020 14:33:42 +0800 Subject: [PATCH] better readme, type mapping, new option (#5740) --- .../powershell-experimental-petstore.sh | 2 +- docs/generators/powershell-experimental.md | 5 +-- .../PowerShellExperimentalClientCodegen.java | 33 +++++++++++++++---- .../powershell-experimental/README.mustache | 14 ++++++-- .../powershell-experimental/README.md | 12 +++++-- 5 files changed, 51 insertions(+), 15 deletions(-) diff --git a/bin/openapi3/powershell-experimental-petstore.sh b/bin/openapi3/powershell-experimental-petstore.sh index efa400f9c739..254fea356e73 100755 --- a/bin/openapi3/powershell-experimental-petstore.sh +++ b/bin/openapi3/powershell-experimental-petstore.sh @@ -27,6 +27,6 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="generate -t modules/openapi-generator/src/main/resources/powershell-experimental -i modules/openapi-generator/src/test/resources/3_0/powershell/petstore.yaml -g powershell-experimental -o samples/client/petstore/powershell-experimental --additional-properties packageGuid=a27b908d-2a20-467f-bc32-af6f3a654ac5,packageName=PSPetstore,apiNamePrefix=PS,packageVersion=0.1.2 -c ./bin/powershell-config.json $@" +ags="generate -t modules/openapi-generator/src/main/resources/powershell-experimental -i modules/openapi-generator/src/test/resources/3_0/powershell/petstore.yaml -g powershell-experimental -o samples/client/petstore/powershell-experimental --additional-properties powershellGalleryUrl=https://www.powershellgallery.com/packages/PSPetstore,packageGuid=a27b908d-2a20-467f-bc32-af6f3a654ac5,packageName=PSPetstore,apiNamePrefix=PS,packageVersion=0.1.2 -c ./bin/powershell-config.json $@" java ${JAVA_OPTS} -jar ${executable} ${ags} diff --git a/docs/generators/powershell-experimental.md b/docs/generators/powershell-experimental.md index c5af71a82b0a..36e5728eae7e 100644 --- a/docs/generators/powershell-experimental.md +++ b/docs/generators/powershell-experimental.md @@ -5,10 +5,11 @@ sidebar_label: powershell-experimental | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | -|apiNamePrefix|Prefix that will be appended to all API names ('tags'). Default: empty string. e.g. Pet => Pet.| |null| +|apiNamePrefix|Prefix that will be appended to all PS objects. Default: empty string. e.g. Pet => PSPet.| |null| |packageGuid|GUID for PowerShell module (e.g. a27b908d-2a20-467f-bc32-af6f3a654ac5). A random GUID will be generated by default.| |null| -|packageName|Client package name (e.g. org.openapitools.client).| |PSOpenAPITools| +|packageName|Client package name (e.g. PSTwitter).| |PSOpenAPITools| |packageVersion|Package version (e.g. 0.1.2).| |0.1.2| +|powershellGalleryUrl|URL to the module in PowerShell Gallery (e.g. https://www.powershellgallery.com/packages/PSTwitter/).| |null| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellExperimentalClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellExperimentalClientCodegen.java index 8b5abd37dbfc..02ff6a12b1a2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellExperimentalClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellExperimentalClientCodegen.java @@ -48,6 +48,7 @@ public class PowerShellExperimentalClientCodegen extends DefaultCodegen implemen protected String modelTestPath = "tests/Model"; protected HashSet nullablePrimitives; protected HashSet powershellVerbs; + protected String powershellGalleryUrl; /** * Constructs an instance of `PowerShellExperimentalClientCodegen`. @@ -308,19 +309,23 @@ public class PowerShellExperimentalClientCodegen extends DefaultCodegen implemen typeMapping.put("long", "Int64"); typeMapping.put("double", "Double"); typeMapping.put("number", "Decimal"); - typeMapping.put("date-time", "System.DateTime"); - typeMapping.put("date", "System.DateTime"); - typeMapping.put("object", "String"); + typeMapping.put("object", "System.Hashtable"); typeMapping.put("file", "System.IO.FileInfo"); + typeMapping.put("ByteArray", "System.Byte[]"); typeMapping.put("binary", "System.IO.FileInfo"); + typeMapping.put("date", "System.DateTime"); + typeMapping.put("date-time", "System.DateTime"); typeMapping.put("Date", "System.DateTime"); typeMapping.put("DateTime", "System.DateTime"); + typeMapping.put("UUID", "String"); + typeMapping.put("URI", "String"); cliOptions.clear(); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "Client package name (e.g. org.openapitools.client).").defaultValue(this.packageName)); + cliOptions.add(new CliOption("powershellGalleryUrl", "URL to the module in PowerShell Gallery (e.g. https://www.powershellgallery.com/packages/PSTwitter/).")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "Client package name (e.g. PSTwitter).").defaultValue(this.packageName)); cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "Package version (e.g. 0.1.2).").defaultValue(this.packageVersion)); cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, "GUID for PowerShell module (e.g. a27b908d-2a20-467f-bc32-af6f3a654ac5). A random GUID will be generated by default.")); - cliOptions.add(new CliOption(CodegenConstants.API_NAME_PREFIX, CodegenConstants.API_NAME_PREFIX_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_NAME_PREFIX, "Prefix that will be appended to all PS objects. Default: empty string. e.g. Pet => PSPet.")); } @@ -354,14 +359,30 @@ public class PowerShellExperimentalClientCodegen extends DefaultCodegen implemen this.packageGuid = packageGuid; } + public void setPowershellGalleryUrl(String powershellGalleryUrl) { + this.powershellGalleryUrl = powershellGalleryUrl; + } + @Override public void processOpts() { super.processOpts(); + if (additionalProperties.containsKey("powershellGalleryUrl")) { + setPowershellGalleryUrl((String) additionalProperties.get("powershellGalleryUrl")); + } else { + additionalProperties.put("powershellGalleryUrl", powershellGalleryUrl); + } + + if (StringUtils.isNotBlank(powershellGalleryUrl)) { + additionalProperties.put("powershellGalleryId", powershellGalleryUrl.replaceFirst(".*/([^/?]+).*", "$1")); + //additionalProperties.put("powershellGalleryId", "something"); + } + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) { setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); + } else { + additionalProperties.put("packageGuid", packageGuid); } - additionalProperties.put("packageGuid", packageGuid); if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { this.setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); diff --git a/modules/openapi-generator/src/main/resources/powershell-experimental/README.mustache b/modules/openapi-generator/src/main/resources/powershell-experimental/README.mustache index efa75c23d946..6a7b151d3353 100644 --- a/modules/openapi-generator/src/main/resources/powershell-experimental/README.mustache +++ b/modules/openapi-generator/src/main/resources/powershell-experimental/README.mustache @@ -25,14 +25,22 @@ This PowerShell module is automatically generated by the [OpenAPI Generator](htt ## Installation -Run the following command to build the PowerShell module locally: -- `Build.ps1` -Then import module from the .\src\{{{packageName}}} folder: +{{#powershellGalleryUrl}} +To install from PowerShell Gallery ({{{powershellGalleryUrl}}}) ```powershell +Import-Module -Name {{{powershellGalleryId}}} +``` +{{/powershellGalleryUrl}} + +To install from the source, run the following command to build and install the PowerShell module locally: +```powershell +Build.ps1 Import-Module -Name '.\src\{{{packageName}}}' ``` +To avoid function name collision, one can use `-Prefix`, e.g. `Import-Module -Name '.\src\{{{packageName}}}' -Prefix prefix` + To uninstall the module, simply run: ```powershell Remove-Module -FullyQualifiedName @{ModuleName = "{{{packageName}}}"; ModuleVersion = "{{{packageVersion}}}"} diff --git a/samples/client/petstore/powershell-experimental/README.md b/samples/client/petstore/powershell-experimental/README.md index 60f2c99fc0f1..bb8561d9aff5 100644 --- a/samples/client/petstore/powershell-experimental/README.md +++ b/samples/client/petstore/powershell-experimental/README.md @@ -17,14 +17,20 @@ This PowerShell module is automatically generated by the [OpenAPI Generator](htt ## Installation -Run the following command to build the PowerShell module locally: -- `Build.ps1` -Then import module from the .\src\PSPetstore folder: +To install from PowerShell Gallery (https://www.powershellgallery.com/packages/PSPetstore) ```powershell +Import-Module -Name PSPetstore +``` + +To install from the source, run the following command to build and install the PowerShell module locally: +```powershell +Build.ps1 Import-Module -Name '.\src\PSPetstore' ``` +To avoid function name collision, one can use `-Prefix`, e.g. `Import-Module -Name '.\src\PSPetstore' -Prefix prefix` + To uninstall the module, simply run: ```powershell Remove-Module -FullyQualifiedName @{ModuleName = "PSPetstore"; ModuleVersion = "0.1.2"}