Merge remote-tracking branch 'origin/master' into 3.3.x

This commit is contained in:
William Cheng 2018-08-23 18:21:44 +08:00
commit 8be06bc22d
1132 changed files with 20804 additions and 17446 deletions

15
.gitignore vendored
View File

@ -93,21 +93,6 @@ samples/client/petstore/java/jersey2-java6/project/
samples/client/petstore/java/jersey2-java8/project/ samples/client/petstore/java/jersey2-java8/project/
samples/client/petstore/java/jersey2/project/ samples/client/petstore/java/jersey2/project/
#PHP
samples/client/petstore/php/OpenAPIToolsClient-php/composer.lock
samples/client/petstore/php/OpenAPIToolsClient-php/vendor/
samples/client/petstore/silex/SwaggerServer/composer.lock
samples/client/petstore/silex/SwaggerServer/venodr/
**/vendor/
**/composer.lock
#PHP-Symfony
samples/server/petstore/php-symfony/SymfonyBundle-php/Tests/cache/
samples/server/petstore/php-symfony/SymfonyBundle-php/Tests/logs/
#PHP-laravel
samples/server/petstore/php-laravel/node_modules
# Perl # Perl
samples/client/petstore/perl/deep_module_test/ samples/client/petstore/perl/deep_module_test/

36
.hub.cli.dockerfile Normal file
View File

@ -0,0 +1,36 @@
## The builder labeled image acts as a transient container which is meant to
## hold all non-artifact code.
##
## You can build _just_ this part with:
## docker --target builder -t container-name:builder -f .hub.cli.dockerfile .
FROM jimschubert/8-jdk-alpine-mvn:1.0 as builder
RUN set -x && \
apk add --no-cache bash
ENV GEN_DIR /opt/openapi-generator
WORKDIR ${GEN_DIR}
COPY . ${GEN_DIR}
# Pre-compile openapi-generator-cli
RUN mvn -am -pl "modules/openapi-generator-cli" package
## The final (release) image
## The resulting container here only needs the target jar
## and ca-certificates (to be able to query HTTPS hosted specs)
FROM openjdk:8-jre-alpine
ENV GEN_DIR /opt/openapi-generator
RUN apk --no-cache add ca-certificates bash
RUN mkdir -p ${GEN_DIR}/modules/openapi-generator-cli/target
WORKDIR ${GEN_DIR}/modules/openapi-generator-cli/target
COPY --from=builder ${GEN_DIR}/modules/openapi-generator-cli/target/openapi-generator-cli.jar ${GEN_DIR}/modules/openapi-generator-cli/target/openapi-generator-cli.jar
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["help"]

35
.hub.online.dockerfile Normal file
View File

@ -0,0 +1,35 @@
## The builder labeled image acts as a transient container which is meant to
## hold all non-artifact code.
##
## You can build _just_ this part with:
## docker --target builder -t container-name:builder -f .hub.online.dockerfile .
FROM jimschubert/8-jdk-alpine-mvn:1.0 as builder
RUN set -x && \
apk add --no-cache bash
ENV GEN_DIR /opt/openapi-generator
WORKDIR ${GEN_DIR}
COPY . ${GEN_DIR}
# Pre-compile openapi-generator-online
RUN mvn -am -pl "modules/openapi-generator-online" package
## The final (release) image
## The resulting container here only needs the target jar
FROM openjdk:8-jre-alpine
ENV GEN_DIR /opt/openapi-generator
ENV TARGET_DIR /generator
RUN mkdir -p ${TARGET_DIR}
WORKDIR ${TARGET_DIR}
COPY --from=builder ${GEN_DIR}/modules/openapi-generator-online/target/openapi-generator-*.jar ${TARGET_DIR}/openapi-generator-online.jar
ENV GENERATOR_HOST=http://localhost
EXPOSE 8080
CMD ["java", "-jar", "/generator/openapi-generator-online.jar"]

View File

@ -31,6 +31,8 @@ cache:
- $HOME/.cargo - $HOME/.cargo
- $HOME/.stack - $HOME/.stack
- $HOME/samples/server/petstore/cpp-pistache/pistache - $HOME/samples/server/petstore/cpp-pistache/pistache
- $HOME/.npm
- $HOME/.rvm/gems/ruby-2.4.1
services: services:
- docker - docker
@ -57,7 +59,7 @@ before_install:
- gem install bundler - gem install bundler
- npm install -g typescript - npm install -g typescript
- npm install -g npm - npm install -g npm
- npm install -g elm - npm install -g elm@0.18.0-exp5
- npm config set registry http://registry.npmjs.org/ - npm config set registry http://registry.npmjs.org/
# set python 3.6.3 as default # set python 3.6.3 as default
- source ~/virtualenv/python3.6/bin/activate - source ~/virtualenv/python3.6/bin/activate

View File

@ -28,7 +28,7 @@ public class ApiClientTest {
assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00"))); assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00")));
// custom date format: without milli-seconds, custom time zone // custom date format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10")); format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format); apiClient.setDateFormat(format);
dateStr = "2015-11-07T13:49:09+10:00"; dateStr = "2015-11-07T13:49:09+10:00";

View File

@ -28,7 +28,7 @@ public class ApiClientTest {
assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00"))); assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00")));
// custom date format: without milli-seconds, custom time zone // custom date format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10")); format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format); apiClient.setDateFormat(format);
dateStr = "2015-11-07T13:49:09+10:00"; dateStr = "2015-11-07T13:49:09+10:00";

View File

@ -12,6 +12,7 @@ import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone; import java.util.TimeZone;
import okio.ByteString; import okio.ByteString;
@ -46,7 +47,7 @@ public class JSONTest {
assertEquals(json.deserialize("\"2015-11-07T03:49:09.356" + getCurrentTimezoneOffset() + "\"", java.sql.Date.class).toString(), date.toString()); assertEquals(json.deserialize("\"2015-11-07T03:49:09.356" + getCurrentTimezoneOffset() + "\"", java.sql.Date.class).toString(), date.toString());
// custom date format: without day // custom date format: without day
DateFormat format = new SimpleDateFormat("yyyy-MM"); DateFormat format = new SimpleDateFormat("yyyy-MM", Locale.ROOT);
apiClient.setSqlDateFormat(format); apiClient.setSqlDateFormat(format);
String dateStr = "\"2015-11\""; String dateStr = "\"2015-11\"";
assertEquals(dateStr, json.serialize(json.deserialize("\"2015-11-07T03:49:09Z\"", java.sql.Date.class))); assertEquals(dateStr, json.serialize(json.deserialize("\"2015-11-07T03:49:09Z\"", java.sql.Date.class)));
@ -79,7 +80,7 @@ public class JSONTest {
assertEquals(utcDate, json.serialize(date)); assertEquals(utcDate, json.serialize(date));
// custom datetime format: without milli-seconds, custom time zone // custom datetime format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10")); format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format); apiClient.setDateFormat(format);
@ -190,10 +191,10 @@ public class JSONTest {
public static String getCurrentTimezoneOffset() { public static String getCurrentTimezoneOffset() {
TimeZone tz = TimeZone.getDefault(); TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz); Calendar cal = GregorianCalendar.getInstance(tz, Locale.ROOT);
int offsetInMillis = tz.getOffset(cal.getTimeInMillis()); int offsetInMillis = tz.getOffset(cal.getTimeInMillis());
String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); String offset = String.format(Locale.ROOT,"%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60));
offset = (offsetInMillis >= 0 ? "+" : "-") + offset; offset = (offsetInMillis >= 0 ? "+" : "-") + offset;
return offset; return offset;

View File

@ -34,7 +34,7 @@ public class ApiClientTest {
assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00"))); assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00")));
// custom date format: without milli-seconds, custom time zone // custom date format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10")); format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format); apiClient.setDateFormat(format);
dateStr = "2015-11-07T13:49:09+10:00"; dateStr = "2015-11-07T13:49:09+10:00";

View File

@ -2,7 +2,7 @@
<div align="center"> <div align="center">
[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`3.2.2`): [![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/master.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator) [Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`3.2.3`): [![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/master.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator)
[![Integration Test2](https://circleci.com/gh/OpenAPITools/openapi-generator.svg?style=shield)](https://circleci.com/gh/OpenAPITools/openapi-generator) [![Integration Test2](https://circleci.com/gh/OpenAPITools/openapi-generator.svg?style=shield)](https://circleci.com/gh/OpenAPITools/openapi-generator)
[![Run Status](https://api.shippable.com/projects/5af6bf74e790f4070084a115/badge?branch=master)](https://app.shippable.com/github/OpenAPITools/openapi-generator) [![Run Status](https://api.shippable.com/projects/5af6bf74e790f4070084a115/badge?branch=master)](https://app.shippable.com/github/OpenAPITools/openapi-generator)
[![Windows Test](https://ci.appveyor.com/api/projects/status/github/openapitools/openapi-generator?branch=master&svg=true&passingText=Windows%20Test%20-%20OK&failingText=Windows%20Test%20-%20Fails)](https://ci.appveyor.com/project/WilliamCheng/openapi-generator-wh2wu) [![Windows Test](https://ci.appveyor.com/api/projects/status/github/openapitools/openapi-generator?branch=master&svg=true&passingText=Windows%20Test%20-%20OK&failingText=Windows%20Test%20-%20Fails)](https://ci.appveyor.com/project/WilliamCheng/openapi-generator-wh2wu)
@ -84,8 +84,8 @@ OpenAPI Generator Version | Release Date | Notes
---------------------------- | ------------ | ----- ---------------------------- | ------------ | -----
4.0.0 (upcoming major release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/4.0.0-SNAPSHOT/)| TBD | Major release with breaking changes (no fallback) 4.0.0 (upcoming major release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/4.0.0-SNAPSHOT/)| TBD | Major release with breaking changes (no fallback)
3.3.0 (upcoming minor release)| TBD | Minor release (breaking changes with fallbacks) 3.3.0 (upcoming minor release)| TBD | Minor release (breaking changes with fallbacks)
3.2.2 (current master, upcoming patch release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/3.2.2-SNAPSHOT/)| TBD | Bugfix release 3.2.3 (current master, upcoming patch release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/3.2.3-SNAPSHOT/)| TBD | Bugfix release
[3.2.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.2.1) (latest stable release) | 14.08.2018 | Bugfix release [3.2.2](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.2.2) (latest stable release) | 22.08.2018 | Bugfix release
OpenAPI Spec compatibility: 1.0, 1.1, 1.2, 2.0, 3.0 OpenAPI Spec compatibility: 1.0, 1.1, 1.2, 2.0, 3.0
@ -141,16 +141,16 @@ See the different versions of the [openapi-generator-cli](https://mvnrepository.
If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 8 runtime at a minimum): If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 8 runtime at a minimum):
JAR location: `http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.1/openapi-generator-cli-3.2.1.jar` JAR location: `http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.2/openapi-generator-cli-3.2.2.jar`
For **Mac/Linux** users: For **Mac/Linux** users:
```sh ```sh
wget http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.1/openapi-generator-cli-3.2.1.jar -O openapi-generator-cli.jar wget http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.2/openapi-generator-cli-3.2.2.jar -O openapi-generator-cli.jar
``` ```
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g. For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
``` ```
Invoke-WebRequest -OutFile openapi-generator-cli.jar http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.1/openapi-generator-cli-3.2.1.jar Invoke-WebRequest -OutFile openapi-generator-cli.jar http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.2/openapi-generator-cli-3.2.2.jar
``` ```
After downloading the JAR, run `java -jar openapi-generator-cli.jar help` to show the usage. After downloading the JAR, run `java -jar openapi-generator-cli.jar help` to show the usage.
@ -163,7 +163,7 @@ export PATH=${JAVA_HOME}/bin:$PATH
### Launcher Script ### Launcher Script
One downside to manual jar downloads is that you don't keep up-to-date with the latest released version. We have a Bash launcher script at [bin/utils/openapi-generator.cli.sh](./bin/utils/openapi-generator.cli.sh) which resolves this issue. One downside to manual jar downloads is that you don't keep up-to-date with the latest released version. We have a Bash launcher script at [bin/utils/openapi-generator.cli.sh](./bin/utils/openapi-generator-cli.sh) which resolves this issue.
To install the launcher script, copy the contents of the script to a location on your path and make the script executable. To install the launcher script, copy the contents of the script to a location on your path and make the script executable.
@ -406,13 +406,14 @@ SYNOPSIS
[--invoker-package <invoker package>] [--invoker-package <invoker package>]
[(-l <language> | --lang <language>)] [(-l <language> | --lang <language>)]
[--language-specific-primitives <language specific primitives>...] [--language-specific-primitives <language specific primitives>...]
[--library <library>] [--model-name-prefix <model name prefix>] [--library <library>] [--log-to-stderr]
[--model-name-prefix <model name prefix>]
[--model-name-suffix <model name suffix>] [--model-name-suffix <model name suffix>]
[--model-package <model package>] [--model-package <model package>]
[(-o <output directory> | --output <output directory>)] [(-o <output directory> | --output <output directory>)]
[--release-note <release note>] [--remove-operation-id-prefix] [--release-note <release note>] [--remove-operation-id-prefix]
[--reserved-words-mappings <reserved word mappings>...] [--reserved-words-mappings <reserved word mappings>...]
[(-s | --skip-overwrite)] [(-s | --skip-overwrite)] [--skip-validate-spec]
[(-t <template directory> | --template-dir <template directory>)] [(-t <template directory> | --template-dir <template directory>)]
[--type-mappings <type mappings>...] [(-v | --verbose)] [--type-mappings <type mappings>...] [(-v | --verbose)]
@ -472,6 +473,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in
- [Raiffeisen Schweiz Genossenschaft](https://www.raiffeisen.ch) - [Raiffeisen Schweiz Genossenschaft](https://www.raiffeisen.ch)
- [RepreZen API Studio](https://www.reprezen.com/swagger-openapi-code-generation-api-first-microservices-enterprise-development) - [RepreZen API Studio](https://www.reprezen.com/swagger-openapi-code-generation-api-first-microservices-enterprise-development)
- [REST United](https://restunited.com) - [REST United](https://restunited.com)
- [Suva](https://www.suva.ch/)
- [Telstra](https://dev.telstra.com) - [Telstra](https://dev.telstra.com)
- [unblu inc.](https://www.unblu.com/) - [unblu inc.](https://www.unblu.com/)
@ -482,7 +484,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in
- 2018/05/15 - [REST API仕様からAPIクライアントやスタブサーバを自動生成する「OpenAPI Generator」オープンソースで公開。Swagger Codegenからのフォーク](https://www.publickey1.jp/blog/18/rest_apiapiopenapi_generatorswagger_generator.html) by [Publickey](https://www.publickey1.jp) - 2018/05/15 - [REST API仕様からAPIクライアントやスタブサーバを自動生成する「OpenAPI Generator」オープンソースで公開。Swagger Codegenからのフォーク](https://www.publickey1.jp/blog/18/rest_apiapiopenapi_generatorswagger_generator.html) by [Publickey](https://www.publickey1.jp)
- 2018/06/08 - [Swagger Codegen is now OpenAPI Generator](https://angular.schule/blog/2018-06-swagger-codegen-is-now-openapi-generator) by [JohannesHoppe](https://github.com/JohannesHoppe) - 2018/06/08 - [Swagger Codegen is now OpenAPI Generator](https://angular.schule/blog/2018-06-swagger-codegen-is-now-openapi-generator) by [JohannesHoppe](https://github.com/JohannesHoppe)
- 2018/06/21 - [Connect your JHipster apps to the world of APIs with OpenAPI and gRPC](https://fr.slideshare.net/chbornet/jhipster-conf-2018-connect-your-jhipster-apps-to-the-world-of-apis-with-openapi-and-grpc) by [Christophe Bornet](https://github.com/cbornet) at [JHipster Conf 2018](https://jhipster-conf.github.io/) - 2018/06/21 - [Connect your JHipster apps to the world of APIs with OpenAPI and gRPC](https://fr.slideshare.net/chbornet/jhipster-conf-2018-connect-your-jhipster-apps-to-the-world-of-apis-with-openapi-and-grpc) by [Christophe Bornet](https://github.com/cbornet) at [JHipster Conf 2018](https://jhipster-conf.github.io/)
- 2018/06/27 - [Lessons Learned from Leading an Open-Source Project Supporting 30+ Programming Languages](https://speakerdeck.com/wing328/lessons-learned-from-leading-an-open-source-project-supporting-30-plus-programming-languages) - [William Cheng](https://github.com/wing328) at [LinuxCon + ContainerCon + CloudOpen China 2018](https://www.lfasiallc.com/events/lc3-2018/) - 2018/06/27 - [Lessons Learned from Leading an Open-Source Project Supporting 30+ Programming Languages](https://speakerdeck.com/wing328/lessons-learned-from-leading-an-open-source-project-supporting-30-plus-programming-languages) - [William Cheng](https://github.com/wing328) at [LinuxCon + ContainerCon + CloudOpen China 2018](http://bit.ly/2waDKKX)
- 2018/07/19 - [OpenAPI Generator Contribution Quickstart - RingCentral Go SDK](https://medium.com/ringcentral-developers/openapi-generator-for-go-contribution-quickstart-8cc72bf37b53) by [John Wang](https://github.com/grokify) - 2018/07/19 - [OpenAPI Generator Contribution Quickstart - RingCentral Go SDK](https://medium.com/ringcentral-developers/openapi-generator-for-go-contribution-quickstart-8cc72bf37b53) by [John Wang](https://github.com/grokify)
## [6 - About Us](#table-of-contents) ## [6 - About Us](#table-of-contents)

View File

@ -27,6 +27,6 @@ fi
# if you've executed sbt assembly previously it will use that instead. # if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="generate -t modules/openapi-generator/src/main/resources/php-silex -i modules/openapi-generator/src/test/resources/2_0/petstore-security-test.yaml -g php-silex -o samples/server/petstore-security-test/silex $@" ags="generate -t modules/openapi-generator/src/main/resources/php-silex -i modules/openapi-generator/src/test/resources/2_0/petstore-security-test.yaml -g php-silex -o samples/server/petstore-security-test/silex/SwaggerServer $@"
java $JAVA_OPTS -jar $executable $ags java $JAVA_OPTS -jar $executable $ags

View File

@ -10,7 +10,7 @@ echo "Please press CTRL+C to stop or the script will continue in 5 seconds."
sleep 5 sleep 5
# LIST OF SCRIPTS: # LIST OF SCRIPTS:
./bin/ruby-petstore.sh > /dev/null 2>&1 ./bin/ruby-client-petstore.sh > /dev/null 2>&1
./bin/java-petstore-all.sh > /dev/null 2>&1 ./bin/java-petstore-all.sh > /dev/null 2>&1
./bin/java-jaxrs-petstore-server-all.sh > /dev/null 2>&1 ./bin/java-jaxrs-petstore-server-all.sh > /dev/null 2>&1
./bin/spring-all-pestore.sh > /dev/null 2>&1 ./bin/spring-all-pestore.sh > /dev/null 2>&1

View File

@ -35,6 +35,8 @@ These names can be anything you like. If you are building a client for the white
**NOTE** Convention is to use kebab casing for names passed to `-n`. Example, `scala-finatra` would become `ScalaFinatraGenerator`. **NOTE** Convention is to use kebab casing for names passed to `-n`. Example, `scala-finatra` would become `ScalaFinatraGenerator`.
#### Use your new generator with the CLI
To compile your library, enter the `out/generators/my-codegen` directory, run `mvn package` and execute the generator: To compile your library, enter the `out/generators/my-codegen` directory, run `mvn package` and execute the generator:
```sh ```sh
@ -50,11 +52,59 @@ Note the `my-codegen` is an option for `-g` now, and you can use the usual argum
```sh ```sh
java -cp out/codegens/customCodegen/target/my-codegen-openapi-generator-1.0.0.jar:modules/openapi-generator-cli/target/openapi-generator-cli.jar \ java -cp out/codegens/customCodegen/target/my-codegen-openapi-generator-1.0.0.jar:modules/openapi-generator-cli/target/openapi-generator-cli.jar \
io.openapitools.codegen.OpenAPIGenerator generate -g my-codegen \ org.openapitools.codegen.OpenAPIGenerator generate -g my-codegen \
-i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml \ -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml \
-o ./out/myClient -o ./out/myClient
``` ```
For Windows users:
```
java -cp out/codegens/customCodegen/target/my-codegen-openapi-generator-1.0.0.jar;modules/openapi-generator-cli/target/openapi-generator-cli.jar \
org.openapitools.codegen.OpenAPIGenerator generate -g my-codegen \
-i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml \
-o ./out/myClient
```
#### Use your new generator with the maven plugin
Install your library to your local maven repository by running:
```
mvn clean install -f out/generators/my-codegen
```
This will install `org.openapitools:my-codegen-openapi-generator:1.0.0` to your local maven repository.
You can use this as additional dependency of the `openapi-generator-maven-plugin` plugin and use `my-codegen` as `generatorName` value:
```xml
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>${openapi-generator-version}</version>
<executions>
<execution>
<id>generate-client-code</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generatorName>my-codegen</generatorName>
<!-- other configuration ... -->
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>my-codegen-openapi-generator</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</plugin>
```
If you publish your artifact to a distant maven repository, do not forget to add this repository as `pluginRepository` for your project.
### Selective generation ### Selective generation
You may not want to generate *all* models in your project. Likewise you may want just one or two apis to be written. If that's the case, you can use system properties to control the output: You may not want to generate *all* models in your project. Likewise you may want just one or two apis to be written. If that's the case, you can use system properties to control the output:
@ -106,6 +156,14 @@ java -Dapis -DmodelTests=false {opts}
When using selective generation, _only_ the templates needed for the specific generation will be used. When using selective generation, _only_ the templates needed for the specific generation will be used.
To skip models defined as the form parameters in "requestBody", please use `skipFormModel` (default to false) (this option is introduced at v3.2.2)
```sh
java -DskipFormModel=true
```
This option will be helpful to skip model generation due to the form parameter, which is defined differently in OAS3 as there's no form parameter in OAS3
### Ignore file format ### Ignore file format
OpenAPI Generator supports a `.openapi-generator-ignore` file, similar to `.gitignore` or `.dockerignore` you're probably already familiar with. OpenAPI Generator supports a `.openapi-generator-ignore` file, similar to `.gitignore` or `.dockerignore` you're probably already familiar with.

View File

@ -24,6 +24,8 @@ import io.airlift.airline.ParseOptionMissingException;
import io.airlift.airline.ParseOptionMissingValueException; import io.airlift.airline.ParseOptionMissingValueException;
import org.openapitools.codegen.cmd.*; import org.openapitools.codegen.cmd.*;
import java.util.Locale;
/** /**
* User: lanwen Date: 24.03.15 Time: 17:56 * User: lanwen Date: 24.03.15 Time: 17:56
* <p> * <p>
@ -40,6 +42,7 @@ public class OpenAPIGenerator {
Cli.<Runnable>builder("openapi-generator-cli") Cli.<Runnable>builder("openapi-generator-cli")
.withDescription( .withDescription(
String.format( String.format(
Locale.ROOT,
"OpenAPI generator CLI (version %s).", "OpenAPI generator CLI (version %s).",
version)) version))
.withDefaultCommand(ListGenerators.class) .withDefaultCommand(ListGenerators.class)
@ -69,10 +72,10 @@ public class OpenAPIGenerator {
System.exit(1); System.exit(1);
} }
} catch (ParseArgumentsUnexpectedException e) { } catch (ParseArgumentsUnexpectedException e) {
System.err.printf("[error] %s%n%nSee 'openapi-generator-cli help' for usage.%n", e.getMessage()); System.err.printf(Locale.ROOT,"[error] %s%n%nSee 'openapi-generator-cli help' for usage.%n", e.getMessage());
System.exit(1); System.exit(1);
} catch (ParseOptionMissingException | ParseOptionMissingValueException e) { } catch (ParseOptionMissingException | ParseOptionMissingValueException e) {
System.err.printf("[error] %s%n", e.getMessage()); System.err.printf(Locale.ROOT,"[error] %s%n", e.getMessage());
System.exit(1); System.exit(1);
} }
} }

View File

@ -17,6 +17,8 @@
package org.openapitools.codegen.cmd; package org.openapitools.codegen.cmd;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.spi.FilterAttachable;
import io.airlift.airline.Command; import io.airlift.airline.Command;
import io.airlift.airline.Option; import io.airlift.airline.Option;
import org.openapitools.codegen.ClientOptInput; import org.openapitools.codegen.ClientOptInput;
@ -32,6 +34,7 @@ import static org.apache.commons.lang3.StringUtils.isNotEmpty;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Stream;
/** /**
* User: lanwen Date: 24.03.15 Time: 20:22 * User: lanwen Date: 24.03.15 Time: 20:22
@ -199,8 +202,23 @@ public class Generate implements Runnable {
description = "Skips the default behavior of validating an input specification.") description = "Skips the default behavior of validating an input specification.")
private Boolean skipValidateSpec; private Boolean skipValidateSpec;
@Option(name = {"--log-to-stderr"},
title = "Log to STDERR",
description = "write all log messages (not just errors) to STDOUT."
+ " Useful for piping the JSON output of debug options (e.g. `-DdebugOperations`) to an external parser directly while testing a generator.")
private Boolean logToStderr;
@Override @Override
public void run() { public void run() {
if (logToStderr != null) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
Stream.of(Logger.ROOT_LOGGER_NAME, "io.swagger", "org.openapitools")
.map(lc::getLogger)
.peek(logger -> logger.detachAppender("STDOUT"))
.reduce((logger, next) -> logger.getName().equals(Logger.ROOT_LOGGER_NAME) ? logger : next)
.map(root -> root.getAppender("STDERR"))
.ifPresent(FilterAttachable::clearAllFilters);
}
// attempt to read from config file // attempt to read from config file
CodegenConfigurator configurator = CodegenConfigurator.fromFile(configFile); CodegenConfigurator configurator = CodegenConfigurator.fromFile(configFile);

View File

@ -21,6 +21,8 @@ import ch.lambdaj.collection.LambdaIterable;
import io.airlift.airline.Command; import io.airlift.airline.Command;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import java.util.Locale;
import static ch.lambdaj.Lambda.on; import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.collection.LambdaCollections.with; import static ch.lambdaj.collection.LambdaCollections.with;
import static java.util.ServiceLoader.load; import static java.util.ServiceLoader.load;
@ -34,6 +36,6 @@ public class Langs implements Runnable {
public void run() { public void run() {
LambdaIterable<String> langs = LambdaIterable<String> langs =
with(load(CodegenConfig.class)).extract(on(CodegenConfig.class).getName()); with(load(CodegenConfig.class)).extract(on(CodegenConfig.class).getName());
System.out.printf("Available languages (generators): %s%n", langs); System.out.printf(Locale.ROOT, "Available languages (generators): %s%n", langs);
} }
} }

View File

@ -9,6 +9,7 @@ import org.openapitools.codegen.CodegenType;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Locale;
// NOTE: List can later have subcommands such as list languages, list types, list frameworks, etc. // NOTE: List can later have subcommands such as list languages, list types, list frameworks, etc.
@Command(name = "list", description = "Lists the available generators") @Command(name = "list", description = "Lists the available generators")
@ -53,6 +54,6 @@ public class ListGenerators implements Runnable {
} }
} }
System.out.printf("%s%n", sb.toString()); System.out.printf(Locale.ROOT,"%s%n", sb.toString());
} }
} }

View File

@ -2,6 +2,9 @@
This document describes the gradle plugin for OpenAPI Generator. This document describes the gradle plugin for OpenAPI Generator.
This gradle plugin offers a declarative DSL via _extensions_ (these are Gradle project extensions).
These map almost fully 1:1 with the options you'd pass to the CLI or Maven plugin. The plugin maps the extensions to a task of the same name to provide a clean API. If you're interested in the extension/task mapping concept from a high-level, you can https://docs.gradle.org/current/userguide/custom_plugins.html#sec:mapping_extension_properties_to_task_properties[check out Gradle's docs].
== Tasks == Tasks
Tasks are listed under the "OpenAPI Tools" tasks heading. Tasks are listed under the "OpenAPI Tools" tasks heading.
@ -24,6 +27,17 @@ Tasks are listed under the "OpenAPI Tools" tasks heading.
|Validates an Open API 2.0 or 3.x specification document. |Validates an Open API 2.0 or 3.x specification document.
|=== |===
[NOTE]
====
The plugin implements the above tasks as project extensions of the same name. If you'd like to declare
these tasks as dependencies to other tasks (using `dependsOn`), you'll need a task reference. e.g.:
```
compileJava.dependsOn tasks.openApiGenerate
```
====
== Plugin Setup == Plugin Setup
[source,groovy] [source,groovy]
@ -34,7 +48,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath "org.openapitools:openapi-generator-gradle-plugin:3.2.1" classpath "org.openapitools:openapi-generator-gradle-plugin:3.2.2"
} }
} }
@ -455,3 +469,65 @@ Run with --stacktrace option to get the stack trace. Run with --info or --debug
---- ----
$ ./gradlew openApiValidate --input=/Users/jim/projects/openapi-generator/modules/openapi-generator/src/test/resources/3_0/petstore.yaml $ ./gradlew openApiValidate --input=/Users/jim/projects/openapi-generator/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
---- ----
=== Generate multiple sources
If you want to perform multiple generation tasks, you'd want to create a task that inherits from the `GenerateTask`.
Examples can be found in https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator-gradle-plugin/samples/local-spec/build.gradle[samples/local-spec/build.gradle].
You can define any number of generator tasks; the generated code does _not_ need to be a JVM language.
```gradle
task buildGoClient(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
generatorName = "go"
inputSpec = "$rootDir/petstore-v3.0.yaml".toString()
additionalProperties = [
packageName: "petstore"
]
outputDir = "$buildDir/go".toString()
configOptions = [
dateLibrary: "threetenp"
]
}
task buildKotlinClient(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
generatorName = "kotlin"
inputSpec = "$rootDir/petstore-v3.0.yaml".toString()
outputDir = "$buildDir/kotlin".toString()
apiPackage = "org.openapitools.example.api"
invokerPackage = "org.openapitools.example.invoker"
modelPackage = "org.openapitools.example.model"
configOptions = [
dateLibrary: "java8"
]
systemProperties = [
modelDocs: "false"
]
}
```
To execute your specs, you'd then do:
```
./gradlew buildGoClient buildKotlinClient
```
If you want to simplify the execution, you could create a new task with `dependsOn`.
```gradle
task codegen(dependsOn: ['buildGoClient', 'buildKotlinClient'])
```
Or, if you're generating the code on compile, you can add these as a dependency to `compileJava` or any other existing task.
You can also mix the default task `openApiGenerate` with custom tasks:
```gradle
compileJava.dependsOn buildKotlinClient, tasks.openApiGenerate
```
[NOTE]
====
`openApiGenerate` is a project extension _and_ a task. If you want to use this in `dependsOn`,
you need a task reference or instance. One way to do this is to access it as `tasks.openApiGenerate`.
You can run `gradle tasks --debug` to see this registration.
====

View File

@ -17,5 +17,5 @@ gradle generateGoWithInvalidSpec
The samples can be tested against other versions of the plugin using the `openApiGeneratorVersion` property. For example: The samples can be tested against other versions of the plugin using the `openApiGeneratorVersion` property. For example:
```bash ```bash
gradle -PopenApiGeneratorVersion=3.2.1 openApiValidate gradle -PopenApiGeneratorVersion=3.2.2 openApiValidate
``` ```

View File

@ -1 +1 @@
openApiGeneratorVersion=3.2.1 openApiGeneratorVersion=3.2.2

View File

@ -11,7 +11,7 @@ Add to your `build->plugins` section (default phase is `generate-sources` phase)
<plugin> <plugin>
<groupId>org.openapitools</groupId> <groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId> <artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version> <version>3.2.2</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -12,7 +12,7 @@
<plugin> <plugin>
<groupId>org.openapitools</groupId> <groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId> <artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version> <version>3.2.2</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -12,7 +12,7 @@
<plugin> <plugin>
<groupId>org.openapitools</groupId> <groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId> <artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version> <version>3.2.2</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -12,7 +12,7 @@
<plugin> <plugin>
<groupId>org.openapitools</groupId> <groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId> <artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version> <version>3.2.2</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -19,11 +19,16 @@ package org.openapitools.codegen.online.service;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import io.swagger.parser.OpenAPIParser; import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.*;
import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.ClientOpts;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConfigLoader;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.online.model.GeneratorInput; import org.openapitools.codegen.online.model.GeneratorInput;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -34,6 +39,7 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class Generator { public class Generator {
@ -44,7 +50,7 @@ public class Generator {
try { try {
config = CodegenConfigLoader.forName(language); config = CodegenConfigLoader.forName(language);
} catch (Exception e) { } catch (Exception e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, String.format("Unsupported target %s supplied. %s", throw new ResponseStatusException(HttpStatus.BAD_REQUEST, String.format(Locale.ROOT,"Unsupported target %s supplied. %s",
language, e)); language, e));
} }
Map<String, CliOption> map = new LinkedHashMap<>(); Map<String, CliOption> map = new LinkedHashMap<>();
@ -77,7 +83,7 @@ public class Generator {
} }
private static String generate(String language, GeneratorInput opts, Type type) { private static String generate(String language, GeneratorInput opts, Type type) {
LOGGER.debug(String.format("generate %s for %s", type.getTypeName(), language)); LOGGER.debug(String.format(Locale.ROOT,"generate %s for %s", type.getTypeName(), language));
if (opts == null) { if (opts == null) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "No options were supplied"); throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "No options were supplied");
} }

View File

@ -23,6 +23,8 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.servers.ServerVariable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -113,6 +115,10 @@ public interface CodegenConfig {
List<CodegenSecurity> fromSecurity(Map<String, SecurityScheme> schemas); List<CodegenSecurity> fromSecurity(Map<String, SecurityScheme> schemas);
List<CodegenServer> fromServers(List<Server> servers);
List<CodegenServerVariable> fromServerVariables(Map<String, ServerVariable> variables);
Set<String> defaultIncludes(); Set<String> defaultIncludes();
Map<String, String> typeMapping(); Map<String, String> typeMapping();

View File

@ -31,6 +31,7 @@ public class CodegenConstants {
public static final String API_TESTS = "apiTests"; public static final String API_TESTS = "apiTests";
public static final String API_DOCS = "apiDocs"; public static final String API_DOCS = "apiDocs";
public static final String WITH_XML = "withXml"; public static final String WITH_XML = "withXml";
public static final String SKIP_FORM_MODEL = "skipFormModel";
/* /end System Properties */ /* /end System Properties */
public static final String API_PACKAGE = "apiPackage"; public static final String API_PACKAGE = "apiPackage";

View File

@ -22,6 +22,7 @@ import io.swagger.v3.oas.models.ExternalDocumentation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -76,7 +77,7 @@ public class CodegenModel {
@Override @Override
public String toString() { public String toString() {
return String.format("%s(%s)", name, classname); return String.format(Locale.ROOT, "%s(%s)", name, classname);
} }
@Override @Override

View File

@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -196,7 +197,7 @@ public class CodegenOperation {
* @return true if act as Restful update method, false otherwise * @return true if act as Restful update method, false otherwise
*/ */
public boolean isRestfulUpdate() { public boolean isRestfulUpdate() {
return Arrays.asList("PUT", "PATCH").contains(httpMethod.toUpperCase()) && isMemberPath(); return Arrays.asList("PUT", "PATCH").contains(httpMethod.toUpperCase(Locale.ROOT)) && isMemberPath();
} }
/** /**
@ -205,7 +206,7 @@ public class CodegenOperation {
* @return true request method is PUT, PATCH or POST; false otherwise * @return true request method is PUT, PATCH or POST; false otherwise
*/ */
public boolean isBodyAllowed() { public boolean isBodyAllowed() {
return Arrays.asList("PUT", "PATCH", "POST").contains(httpMethod.toUpperCase()); return Arrays.asList("PUT", "PATCH", "POST").contains(httpMethod.toUpperCase(Locale.ROOT));
} }
/** /**
@ -232,7 +233,7 @@ public class CodegenOperation {
* @return the substring * @return the substring
*/ */
private String pathWithoutBaseName() { private String pathWithoutBaseName() {
return baseName != null ? path.replace("/" + baseName.toLowerCase(), "") : path; return baseName != null ? path.replace("/" + baseName.toLowerCase(Locale.ROOT), "") : path;
} }
/** /**
@ -248,7 +249,7 @@ public class CodegenOperation {
@Override @Override
public String toString() { public String toString() {
return String.format("%s(%s)", baseName, path); return String.format(Locale.ROOT, "%s(%s)", baseName, path);
} }
@Override @Override

View File

@ -59,7 +59,9 @@ public class CodegenProperty implements Cloneable {
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isFile, isBoolean, isDate, isDateTime, isUuid; public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isFile, isBoolean, isDate, isDateTime, isUuid;
public boolean isListContainer, isMapContainer; public boolean isListContainer, isMapContainer;
public boolean isEnum; public boolean isEnum;
public boolean isReadOnly = false; public boolean isReadOnly;
public boolean isWriteOnly;
public boolean isNullable;
public List<String> _enum; public List<String> _enum;
public Map<String, Object> allowableValues; public Map<String, Object> allowableValues;
public CodegenProperty items; public CodegenProperty items;
@ -437,6 +439,8 @@ public class CodegenProperty implements Cloneable {
result = prime * result + ((isNotContainer ? 13:31)); result = prime * result + ((isNotContainer ? 13:31));
result = prime * result + ((isPrimitiveType ? 13:31)); result = prime * result + ((isPrimitiveType ? 13:31));
result = prime * result + ((isReadOnly ? 13:31)); result = prime * result + ((isReadOnly ? 13:31));
result = prime * result + ((isWriteOnly ? 13:31));
result = prime * result + ((isNullable ? 13:31));
result = prime * result + ((items == null) ? 0 : items.hashCode()); result = prime * result + ((items == null) ? 0 : items.hashCode());
result = prime * result + ((mostInnerItems == null) ? 0 : mostInnerItems.hashCode()); result = prime * result + ((mostInnerItems == null) ? 0 : mostInnerItems.hashCode());
result = prime * result + ((jsonSchema == null) ? 0 : jsonSchema.hashCode()); result = prime * result + ((jsonSchema == null) ? 0 : jsonSchema.hashCode());
@ -587,6 +591,12 @@ public class CodegenProperty implements Cloneable {
if (this.isReadOnly != other.isReadOnly) { if (this.isReadOnly != other.isReadOnly) {
return false; return false;
} }
if (this.isWriteOnly != other.isWriteOnly) {
return false;
}
if (this.isNullable != other.isNullable) {
return false;
}
if (this._enum != other._enum && (this._enum == null || !this._enum.equals(other._enum))) { if (this._enum != other._enum && (this._enum == null || !this._enum.equals(other._enum))) {
return false; return false;
} }
@ -769,6 +779,8 @@ public class CodegenProperty implements Cloneable {
", isMapContainer=" + isMapContainer + ", isMapContainer=" + isMapContainer +
", isEnum=" + isEnum + ", isEnum=" + isEnum +
", isReadOnly=" + isReadOnly + ", isReadOnly=" + isReadOnly +
", isWriteOnly=" + isWriteOnly+
", isNullable=" + isNullable +
", _enum=" + _enum + ", _enum=" + _enum +
", allowableValues=" + allowableValues + ", allowableValues=" + allowableValues +
", items=" + items + ", items=" + items +

View File

@ -20,6 +20,7 @@ package org.openapitools.codegen;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class CodegenResponse { public class CodegenResponse {
@ -47,7 +48,7 @@ public class CodegenResponse {
@Override @Override
public String toString() { public String toString() {
return String.format("%s(%s)", code, containerType); return String.format(Locale.ROOT, "%s(%s)", code, containerType);
} }
@Override @Override

View File

@ -21,6 +21,7 @@ import io.swagger.v3.oas.models.security.Scopes;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class CodegenSecurity { public class CodegenSecurity {
@ -38,7 +39,7 @@ public class CodegenSecurity {
@Override @Override
public String toString() { public String toString() {
return String.format("%s(%s)", name, type); return String.format(Locale.ROOT, "%s(%s)", name, type);
} }
@Override @Override

View File

@ -0,0 +1,9 @@
package org.openapitools.codegen;
import java.util.List;
public class CodegenServer {
public String url;
public String description;
public List<CodegenServerVariable> variables;
}

View File

@ -0,0 +1,10 @@
package org.openapitools.codegen;
import java.util.List;
public class CodegenServerVariable {
public String name;
public String defaultValue;
public String description;
public List<String> enumValues;
}

View File

@ -21,6 +21,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public enum CodegenType { public enum CodegenType {
@ -30,7 +31,7 @@ public enum CodegenType {
@JsonCreator @JsonCreator
public static CodegenType forValue(String value) { public static CodegenType forValue(String value) {
return names.get(value.toLowerCase()); return names.get(value.toLowerCase(Locale.ROOT));
} }
@JsonValue @JsonValue

View File

@ -43,6 +43,8 @@ import io.swagger.v3.oas.models.responses.ApiResponses;
import io.swagger.v3.oas.models.security.OAuthFlow; import io.swagger.v3.oas.models.security.OAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlows; import io.swagger.v3.oas.models.security.OAuthFlows;
import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.servers.ServerVariable;
import io.swagger.v3.parser.util.SchemaTypeUtil; import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@ -64,7 +66,9 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
@ -72,7 +76,6 @@ import java.util.TreeSet;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
public class DefaultCodegen implements CodegenConfig { public class DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class);
@ -182,7 +185,7 @@ public class DefaultCodegen implements CodegenConfig {
.get(CodegenConstants.REMOVE_OPERATION_ID_PREFIX).toString())); .get(CodegenConstants.REMOVE_OPERATION_ID_PREFIX).toString()));
} }
if (additionalProperties.containsKey(CodegenConstants.DOCEXTENSION)){ if (additionalProperties.containsKey(CodegenConstants.DOCEXTENSION)) {
this.setDocExtension(String.valueOf(additionalProperties this.setDocExtension(String.valueOf(additionalProperties
.get(CodegenConstants.DOCEXTENSION).toString())); .get(CodegenConstants.DOCEXTENSION).toString()));
} }
@ -355,7 +358,7 @@ public class DefaultCodegen implements CodegenConfig {
return "EMPTY"; return "EMPTY";
} }
String var = value.replaceAll("\\W+", "_").toUpperCase(); String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) { if (var.matches("\\d.*")) {
return "_" + var; return "_" + var;
} else { } else {
@ -768,7 +771,7 @@ public class DefaultCodegen implements CodegenConfig {
public String toVarName(String name) { public String toVarName(String name) {
if (reservedWords.contains(name)) { if (reservedWords.contains(name)) {
return escapeReservedWord(name); return escapeReservedWord(name);
} else if (((CharSequence) name).chars().anyMatch(character -> specialCharReplacements.keySet().contains( "" + ((char) character)))) { } else if (((CharSequence) name).chars().anyMatch(character -> specialCharReplacements.keySet().contains("" + ((char) character)))) {
return escapeSpecialCharacters(name, null, null); return escapeSpecialCharacters(name, null, null);
} else { } else {
return name; return name;
@ -786,7 +789,7 @@ public class DefaultCodegen implements CodegenConfig {
name = removeNonNameElementToCamelCase(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. name = removeNonNameElementToCamelCase(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
if (reservedWords.contains(name)) { if (reservedWords.contains(name)) {
return escapeReservedWord(name); return escapeReservedWord(name);
} else if (((CharSequence) name).chars().anyMatch(character -> specialCharReplacements.keySet().contains( "" + ((char) character)))) { } else if (((CharSequence) name).chars().anyMatch(character -> specialCharReplacements.keySet().contains("" + ((char) character)))) {
return escapeSpecialCharacters(name, null, null); return escapeSpecialCharacters(name, null, null);
} }
return name; return name;
@ -829,8 +832,8 @@ public class DefaultCodegen implements CodegenConfig {
/** /**
* Return the name with escaped characters. * Return the name with escaped characters.
* *
* @param name the name to be escaped * @param name the name to be escaped
* @param charactersToAllow characters that are not escaped * @param charactersToAllow characters that are not escaped
* @param appdendixToReplacement String to append to replaced characters. * @param appdendixToReplacement String to append to replaced characters.
* @return the escaped word * @return the escaped word
* <p> * <p>
@ -838,15 +841,15 @@ public class DefaultCodegen implements CodegenConfig {
*/ */
public String escapeSpecialCharacters(String name, List<String> charactersToAllow, String appdendixToReplacement) { public String escapeSpecialCharacters(String name, List<String> charactersToAllow, String appdendixToReplacement) {
String result = (String) ((CharSequence) name).chars().mapToObj(c -> { String result = (String) ((CharSequence) name).chars().mapToObj(c -> {
String character = "" + (char) c; String character = "" + (char) c;
if (charactersToAllow != null && charactersToAllow.contains(character)) { if (charactersToAllow != null && charactersToAllow.contains(character)) {
return character; return character;
} else if (specialCharReplacements.containsKey(character)) { } else if (specialCharReplacements.containsKey(character)) {
return specialCharReplacements.get(character) + (appdendixToReplacement != null ? appdendixToReplacement: ""); return specialCharReplacements.get(character) + (appdendixToReplacement != null ? appdendixToReplacement : "");
} else { } else {
return character; return character;
} }
}).reduce( (c1, c2) -> "" + c1 + c2).orElse(null); }).reduce((c1, c2) -> "" + c1 + c2).orElse(null);
if (result != null) return result; if (result != null) return result;
throw new RuntimeException("Word '" + name + "' could not be escaped."); throw new RuntimeException("Word '" + name + "' could not be escaped.");
@ -1091,7 +1094,7 @@ public class DefaultCodegen implements CodegenConfig {
*/ */
public String toInstantiationType(Schema schema) { public String toInstantiationType(Schema schema) {
if (ModelUtils.isMapSchema(schema)) { if (ModelUtils.isMapSchema(schema)) {
Schema additionalProperties = (Schema) schema.getAdditionalProperties(); Schema additionalProperties = ModelUtils.getAdditionalProperties(schema);
String type = additionalProperties.getType(); String type = additionalProperties.getType();
if (null == type) { if (null == type) {
LOGGER.error("No Type defined for Additional Property " + additionalProperties + "\n" // LOGGER.error("No Type defined for Additional Property " + additionalProperties + "\n" //
@ -1680,13 +1683,13 @@ public class DefaultCodegen implements CodegenConfig {
} }
private CodegenDiscriminator createDiscriminator(String schemaName, Schema schema, Map<String, Schema> allDefinitions) { private CodegenDiscriminator createDiscriminator(String schemaName, Schema schema, Map<String, Schema> allDefinitions) {
if(schema.getDiscriminator() == null) { if (schema.getDiscriminator() == null) {
return null; return null;
} }
CodegenDiscriminator discriminator = new CodegenDiscriminator(); CodegenDiscriminator discriminator = new CodegenDiscriminator();
discriminator.setPropertyName(schema.getDiscriminator().getPropertyName()); discriminator.setPropertyName(schema.getDiscriminator().getPropertyName());
discriminator.setMapping(schema.getDiscriminator().getMapping()); discriminator.setMapping(schema.getDiscriminator().getMapping());
if(schema.getDiscriminator().getMapping() != null && !schema.getDiscriminator().getMapping().isEmpty()) { if (schema.getDiscriminator().getMapping() != null && !schema.getDiscriminator().getMapping().isEmpty()) {
for (Entry<String, String> e : schema.getDiscriminator().getMapping().entrySet()) { for (Entry<String, String> e : schema.getDiscriminator().getMapping().entrySet()) {
String name = ModelUtils.getSimpleRef(e.getValue()); String name = ModelUtils.getSimpleRef(e.getValue());
discriminator.getMappedModels().add(new MappedModel(e.getKey(), name)); discriminator.getMappedModels().add(new MappedModel(e.getKey(), name));
@ -1695,9 +1698,9 @@ public class DefaultCodegen implements CodegenConfig {
allDefinitions.forEach((childName, child) -> { allDefinitions.forEach((childName, child) -> {
if (child instanceof ComposedSchema && ((ComposedSchema) child).getAllOf() != null) { if (child instanceof ComposedSchema && ((ComposedSchema) child).getAllOf() != null) {
Set<String> parentSchemas = ((ComposedSchema) child).getAllOf().stream() Set<String> parentSchemas = ((ComposedSchema) child).getAllOf().stream()
.filter(s -> s.get$ref() != null) .filter(s -> s.get$ref() != null)
.map(s -> ModelUtils.getSimpleRef(s.get$ref())) .map(s -> ModelUtils.getSimpleRef(s.get$ref()))
.collect(Collectors.toSet()); .collect(Collectors.toSet());
if (parentSchemas.contains(schemaName)) { if (parentSchemas.contains(schemaName)) {
discriminator.getMappedModels().add(new MappedModel(childName, childName)); discriminator.getMappedModels().add(new MappedModel(childName, childName));
} }
@ -1783,6 +1786,13 @@ public class DefaultCodegen implements CodegenConfig {
if (p.getReadOnly() != null) { if (p.getReadOnly() != null) {
property.isReadOnly = p.getReadOnly(); property.isReadOnly = p.getReadOnly();
} }
if (p.getWriteOnly() != null) {
property.isWriteOnly = p.getWriteOnly();
}
if (p.getNullable() != null) {
property.isNullable = p.getNullable();
}
if (p.getXml() != null) { if (p.getXml() != null) {
if (p.getXml().getAttribute() != null) { if (p.getXml().getAttribute() != null) {
property.isXmlAttribute = p.getXml().getAttribute(); property.isXmlAttribute = p.getXml().getAttribute();
@ -1995,7 +2005,7 @@ public class DefaultCodegen implements CodegenConfig {
property.maxItems = p.getMaxProperties(); property.maxItems = p.getMaxProperties();
// handle inner property // handle inner property
CodegenProperty cp = fromProperty("inner", (Schema) p.getAdditionalProperties()); CodegenProperty cp = fromProperty("inner", ModelUtils.getAdditionalProperties(p));
updatePropertyForMap(property, cp); updatePropertyForMap(property, cp);
} else { // model } else { // model
// TODO revise the logic below // TODO revise the logic below
@ -2257,7 +2267,7 @@ public class DefaultCodegen implements CodegenConfig {
for (String key : operation.getResponses().keySet()) { for (String key : operation.getResponses().keySet()) {
ApiResponse response = operation.getResponses().get(key); ApiResponse response = operation.getResponses().get(key);
addProducesInfo(openAPI, response, op); addProducesInfo(openAPI, response, op);
CodegenResponse r = fromResponse(key, response); CodegenResponse r = fromResponse(openAPI, key, response);
r.hasMore = true; r.hasMore = true;
if (r.baseType != null && if (r.baseType != null &&
!defaultIncludes.contains(r.baseType) && !defaultIncludes.contains(r.baseType) &&
@ -2285,7 +2295,7 @@ public class DefaultCodegen implements CodegenConfig {
CodegenProperty innerProperty = fromProperty("response", as.getItems()); CodegenProperty innerProperty = fromProperty("response", as.getItems());
op.returnBaseType = innerProperty.baseType; op.returnBaseType = innerProperty.baseType;
} else if (ModelUtils.isMapSchema(responseSchema)) { } else if (ModelUtils.isMapSchema(responseSchema)) {
CodegenProperty innerProperty = fromProperty("response", (Schema) responseSchema.getAdditionalProperties()); CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema));
op.returnBaseType = innerProperty.baseType; op.returnBaseType = innerProperty.baseType;
} else { } else {
if (cm.complexType != null) { if (cm.complexType != null) {
@ -2326,7 +2336,7 @@ public class DefaultCodegen implements CodegenConfig {
op.returnTypeIsPrimitive = true; op.returnTypeIsPrimitive = true;
} }
} }
addHeaders(methodResponse, op.responseHeaders); addHeaders(openAPI, methodResponse, op.responseHeaders);
} }
} }
@ -2366,7 +2376,7 @@ public class DefaultCodegen implements CodegenConfig {
bodyParameterName = (String) op.vendorExtensions.get("x-codegen-request-body-name"); bodyParameterName = (String) op.vendorExtensions.get("x-codegen-request-body-name");
} }
bodyParam = fromRequestBody(requestBody, schemas, imports, bodyParameterName); bodyParam = fromRequestBody(requestBody, schemas, imports, bodyParameterName);
bodyParam.description = requestBody.getDescription(); bodyParam.description = escapeText(requestBody.getDescription());
postProcessParameter(bodyParam); postProcessParameter(bodyParam);
bodyParams.add(bodyParam); bodyParams.add(bodyParam);
@ -2443,7 +2453,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
op.bodyParam = bodyParam; op.bodyParam = bodyParam;
op.httpMethod = httpMethod.toUpperCase(); op.httpMethod = httpMethod.toUpperCase(Locale.ROOT);
// move "required" parameters in front of "optional" parameters // move "required" parameters in front of "optional" parameters
if (sortParamsByRequiredFlag) { if (sortParamsByRequiredFlag) {
@ -2503,11 +2513,12 @@ public class DefaultCodegen implements CodegenConfig {
/** /**
* Convert OAS Response object to Codegen Response object * Convert OAS Response object to Codegen Response object
* *
* @param openAPI a OAS object representing the spec
* @param responseCode HTTP response code * @param responseCode HTTP response code
* @param response OAS Response object * @param response OAS Response object
* @return Codegen Response object * @return Codegen Response object
*/ */
public CodegenResponse fromResponse(String responseCode, ApiResponse response) { public CodegenResponse fromResponse(OpenAPI openAPI, String responseCode, ApiResponse response) {
CodegenResponse r = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE); CodegenResponse r = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE);
if ("default".equals(responseCode)) { if ("default".equals(responseCode)) {
r.code = "0"; r.code = "0";
@ -2524,7 +2535,7 @@ public class DefaultCodegen implements CodegenConfig {
if (response.getExtensions() != null && !response.getExtensions().isEmpty()) { if (response.getExtensions() != null && !response.getExtensions().isEmpty()) {
r.vendorExtensions.putAll(response.getExtensions()); r.vendorExtensions.putAll(response.getExtensions());
} }
addHeaders(response, r.headers); addHeaders(openAPI, response, r.headers);
r.hasHeaders = !r.headers.isEmpty(); r.hasHeaders = !r.headers.isEmpty();
if (r.schema != null) { if (r.schema != null) {
@ -2671,7 +2682,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
} else if (ModelUtils.isMapSchema(parameterSchema)) { // for map parameter } else if (ModelUtils.isMapSchema(parameterSchema)) { // for map parameter
CodegenProperty codegenProperty = fromProperty("inner", (Schema) parameterSchema.getAdditionalProperties()); CodegenProperty codegenProperty = fromProperty("inner", ModelUtils.getAdditionalProperties(parameterSchema));
codegenParameter.items = codegenProperty; codegenParameter.items = codegenProperty;
codegenParameter.mostInnerItems = codegenProperty.mostInnerItems; codegenParameter.mostInnerItems = codegenProperty.mostInnerItems;
codegenParameter.baseType = codegenProperty.dataType; codegenParameter.baseType = codegenProperty.dataType;
@ -2896,7 +2907,7 @@ public class DefaultCodegen implements CodegenConfig {
// TODO revise below as it should be replaced by ModelUtils.isByteArraySchema(parameterSchema) // TODO revise below as it should be replaced by ModelUtils.isByteArraySchema(parameterSchema)
public boolean isDataTypeBinary(String dataType) { public boolean isDataTypeBinary(String dataType) {
if (dataType != null) { if (dataType != null) {
return dataType.toLowerCase().startsWith("byte"); return dataType.toLowerCase(Locale.ROOT).startsWith("byte");
} else { } else {
return false; return false;
} }
@ -2905,7 +2916,7 @@ public class DefaultCodegen implements CodegenConfig {
// TODO revise below as it should be replaced by ModelUtils.isFileSchema(parameterSchema) // TODO revise below as it should be replaced by ModelUtils.isFileSchema(parameterSchema)
public boolean isDataTypeFile(String dataType) { public boolean isDataTypeFile(String dataType) {
if (dataType != null) { if (dataType != null) {
return dataType.toLowerCase().equals("file"); return dataType.toLowerCase(Locale.ROOT).equals("file");
} else { } else {
return false; return false;
} }
@ -2993,12 +3004,12 @@ public class DefaultCodegen implements CodegenConfig {
protected void setReservedWordsLowerCase(List<String> words) { protected void setReservedWordsLowerCase(List<String> words) {
reservedWords = new HashSet<String>(); reservedWords = new HashSet<String>();
for (String word : words) { for (String word : words) {
reservedWords.add(word.toLowerCase()); reservedWords.add(word.toLowerCase(Locale.ROOT));
} }
} }
protected boolean isReservedWord(String word) { protected boolean isReservedWord(String word) {
return word != null && reservedWords.contains(word.toLowerCase()); return word != null && reservedWords.contains(word.toLowerCase(Locale.ROOT));
} }
/** /**
@ -3070,12 +3081,15 @@ public class DefaultCodegen implements CodegenConfig {
* @param response API response * @param response API response
* @param properties list of codegen property * @param properties list of codegen property
*/ */
private void addHeaders(ApiResponse response, List<CodegenProperty> properties) { private void addHeaders(OpenAPI openAPI, ApiResponse response, List<CodegenProperty> properties) {
if (response.getHeaders() != null) { if (response.getHeaders() != null) {
for (Map.Entry<String, Header> headers : response.getHeaders().entrySet()) { for (Map.Entry<String, Header> headers : response.getHeaders().entrySet()) {
CodegenProperty cp = fromProperty(headers.getKey(), headers.getValue().getSchema()); String description = headers.getValue().getDescription();
cp.setDescription(escapeText(headers.getValue().getDescription())); // follow the $ref
cp.setUnescapedDescription(headers.getValue().getDescription()); Header header = ModelUtils.getReferencedHeader(openAPI, headers.getValue());
CodegenProperty cp = fromProperty(headers.getKey(), header.getSchema());
cp.setDescription(escapeText(description));
cp.setUnescapedDescription(description);
properties.add(cp); properties.add(cp);
} }
} }
@ -3124,7 +3138,7 @@ public class DefaultCodegen implements CodegenConfig {
LOGGER.warn("generated unique operationId `" + uniqueName + "`"); LOGGER.warn("generated unique operationId `" + uniqueName + "`");
} }
co.operationId = uniqueName; co.operationId = uniqueName;
co.operationIdLowerCase = uniqueName.toLowerCase(); co.operationIdLowerCase = uniqueName.toLowerCase(Locale.ROOT);
co.operationIdCamelCase = DefaultCodegen.camelize(uniqueName); co.operationIdCamelCase = DefaultCodegen.camelize(uniqueName);
co.operationIdSnakeCase = DefaultCodegen.underscore(uniqueName); co.operationIdSnakeCase = DefaultCodegen.underscore(uniqueName);
opList.add(co); opList.add(co);
@ -3170,7 +3184,7 @@ public class DefaultCodegen implements CodegenConfig {
word = word.replace('-', '_'); word = word.replace('-', '_');
// replace space with underscore // replace space with underscore
word = word.replace(' ', '_'); word = word.replace(' ', '_');
word = word.toLowerCase(); word = word.toLowerCase(Locale.ROOT);
return word; return word;
} }
@ -3334,7 +3348,7 @@ public class DefaultCodegen implements CodegenConfig {
* @param schemas The complete set of model definitions (schemas). * @param schemas The complete set of model definitions (schemas).
* @return A mapping from model name to type alias * @return A mapping from model name to type alias
*/ */
private static Map<String, String> getAllAliases(Map<String, Schema> schemas) { static Map<String, String> getAllAliases(Map<String, Schema> schemas) {
if (schemas == null || schemas.isEmpty()) { if (schemas == null || schemas.isEmpty()) {
return new HashMap<>(); return new HashMap<>();
} }
@ -3377,7 +3391,7 @@ public class DefaultCodegen implements CodegenConfig {
.map(StringUtils::capitalize) .map(StringUtils::capitalize)
.collect(Collectors.joining("")); .collect(Collectors.joining(""));
if (result.length() > 0) { if (result.length() > 0) {
result = result.substring(0, 1).toLowerCase() + result.substring(1); result = result.substring(0, 1).toLowerCase(Locale.ROOT) + result.substring(1);
} }
return result; return result;
} }
@ -3406,7 +3420,7 @@ public class DefaultCodegen implements CodegenConfig {
Pattern p = Pattern.compile("\\/(.?)"); Pattern p = Pattern.compile("\\/(.?)");
Matcher m = p.matcher(word); Matcher m = p.matcher(word);
while (m.find()) { while (m.find()) {
word = m.replaceFirst("." + m.group(1)/*.toUpperCase()*/); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. word = m.replaceFirst("." + m.group(1)/*.toUpperCase(Locale.ROOT)*/); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
m = p.matcher(word); m = p.matcher(word);
} }
@ -3422,7 +3436,7 @@ public class DefaultCodegen implements CodegenConfig {
m = p.matcher(word); m = p.matcher(word);
while (m.find()) { while (m.find()) {
word = m.replaceFirst("" + Character.toUpperCase(m.group(1).charAt(0)) + m.group(1).substring(1)/*.toUpperCase()*/); word = m.replaceFirst("" + Character.toUpperCase(m.group(1).charAt(0)) + m.group(1).substring(1)/*.toUpperCase(Locale.ROOT)*/);
m = p.matcher(word); m = p.matcher(word);
} }
@ -3430,7 +3444,7 @@ public class DefaultCodegen implements CodegenConfig {
p = Pattern.compile("(\\.?)(\\w)([^\\.]*)$"); p = Pattern.compile("(\\.?)(\\w)([^\\.]*)$");
m = p.matcher(word); m = p.matcher(word);
if (m.find()) { if (m.find()) {
String rep = m.group(1) + m.group(2).toUpperCase() + m.group(3); String rep = m.group(1) + m.group(2).toUpperCase(Locale.ROOT) + m.group(3);
rep = rep.replaceAll("\\$", "\\\\\\$"); rep = rep.replaceAll("\\$", "\\\\\\$");
word = m.replaceAll(rep); word = m.replaceAll(rep);
} }
@ -3440,7 +3454,7 @@ public class DefaultCodegen implements CodegenConfig {
m = p.matcher(word); m = p.matcher(word);
while (m.find()) { while (m.find()) {
String original = m.group(2); String original = m.group(2);
String upperCase = original.toUpperCase(); String upperCase = original.toUpperCase(Locale.ROOT);
if (original.equals(upperCase)) { if (original.equals(upperCase)) {
word = word.replaceFirst("_", ""); word = word.replaceFirst("_", "");
} else { } else {
@ -3453,7 +3467,7 @@ public class DefaultCodegen implements CodegenConfig {
p = Pattern.compile("(-)(.)"); p = Pattern.compile("(-)(.)");
m = p.matcher(word); m = p.matcher(word);
while (m.find()) { while (m.find()) {
word = m.replaceFirst(m.group(2).toUpperCase()); word = m.replaceFirst(m.group(2).toUpperCase(Locale.ROOT));
m = p.matcher(word); m = p.matcher(word);
} }
@ -3465,7 +3479,7 @@ public class DefaultCodegen implements CodegenConfig {
charAt = word.charAt(i); charAt = word.charAt(i);
} }
i = i + 1; i = i + 1;
word = word.substring(0, i).toLowerCase() + word.substring(i); word = word.substring(0, i).toLowerCase(Locale.ROOT) + word.substring(i);
} }
// remove all underscore // remove all underscore
@ -3488,7 +3502,7 @@ public class DefaultCodegen implements CodegenConfig {
*/ */
public String apiDocFilename(String templateName, String tag) { public String apiDocFilename(String templateName, String tag) {
String docExtension = getDocExtension(); String docExtension = getDocExtension();
String suffix = docExtension != null ? docExtension: apiDocTemplateFiles().get(templateName); String suffix = docExtension != null ? docExtension : apiDocTemplateFiles().get(templateName);
return apiDocFileFolder() + File.separator + toApiDocFilename(tag) + suffix; return apiDocFileFolder() + File.separator + toApiDocFilename(tag) + suffix;
} }
@ -4239,7 +4253,7 @@ public class DefaultCodegen implements CodegenConfig {
codegenParameter.isPrimitiveType = false; codegenParameter.isPrimitiveType = false;
codegenParameter.isContainer = true; codegenParameter.isContainer = true;
codegenParameter.isListContainer = true; codegenParameter.isListContainer = true;
codegenParameter.description = s.getDescription(); codegenParameter.description = escapeText(s.getDescription());
codegenParameter.dataType = getTypeDeclaration(s); codegenParameter.dataType = getTypeDeclaration(s);
if (codegenParameter.baseType != null && codegenParameter.enumName != null) { if (codegenParameter.baseType != null && codegenParameter.enumName != null) {
codegenParameter.datatypeWithEnum = codegenParameter.dataType.replace(codegenParameter.baseType, codegenParameter.enumName); codegenParameter.datatypeWithEnum = codegenParameter.dataType.replace(codegenParameter.baseType, codegenParameter.enumName);
@ -4365,7 +4379,7 @@ public class DefaultCodegen implements CodegenConfig {
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegenParameter.baseName = "UNKNOWN_BASE_NAME"; codegenParameter.baseName = "UNKNOWN_BASE_NAME";
codegenParameter.paramName = "UNKNOWN_PARAM_NAME"; codegenParameter.paramName = "UNKNOWN_PARAM_NAME";
codegenParameter.description = body.getDescription(); codegenParameter.description = escapeText(body.getDescription());
codegenParameter.required = body.getRequired() != null ? body.getRequired() : Boolean.FALSE; codegenParameter.required = body.getRequired() != null ? body.getRequired() : Boolean.FALSE;
codegenParameter.isBodyParam = Boolean.TRUE; codegenParameter.isBodyParam = Boolean.TRUE;
@ -4378,7 +4392,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
if (ModelUtils.isMapSchema(schema)) { if (ModelUtils.isMapSchema(schema)) {
Schema inner = (Schema) schema.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(schema);
if (inner == null) { if (inner == null) {
inner = new StringSchema().description("//TODO automatically added by openapi-generator"); inner = new StringSchema().description("//TODO automatically added by openapi-generator");
schema.setAdditionalProperties(inner); schema.setAdditionalProperties(inner);
@ -4423,7 +4437,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
if (StringUtils.isEmpty(bodyParameterName)) { if (StringUtils.isEmpty(bodyParameterName)) {
if(StringUtils.isEmpty(mostInnerItem.complexType)) { if (StringUtils.isEmpty(mostInnerItem.complexType)) {
codegenParameter.baseName = "request_body"; codegenParameter.baseName = "request_body";
} else { } else {
codegenParameter.baseName = mostInnerItem.complexType; codegenParameter.baseName = mostInnerItem.complexType;
@ -4466,7 +4480,7 @@ public class DefaultCodegen implements CodegenConfig {
imports.add(codegenParameter.baseType); imports.add(codegenParameter.baseType);
} else { } else {
CodegenProperty codegenProperty = fromProperty("property", schema); CodegenProperty codegenProperty = fromProperty("property", schema);
if (schema.getAdditionalProperties() != null) {// http body is map if (ModelUtils.getAdditionalProperties(schema) != null) {// http body is map
LOGGER.error("Map should be supported. Please report to openapi-generator github repo about the issue."); LOGGER.error("Map should be supported. Please report to openapi-generator github repo about the issue.");
} else if (codegenProperty != null) { } else if (codegenProperty != null) {
String codegenModelName, codegenModelDescription; String codegenModelName, codegenModelDescription;
@ -4588,4 +4602,38 @@ public class DefaultCodegen implements CodegenConfig {
public boolean isDataTypeString(String dataType) { public boolean isDataTypeString(String dataType) {
return "String".equals(dataType); return "String".equals(dataType);
} }
@Override
public List<CodegenServer> fromServers(List<Server> servers) {
if (servers == null) {
return Collections.emptyList();
}
List<CodegenServer> codegenServers = new LinkedList<>();
for (Server server : servers) {
CodegenServer cs = new CodegenServer();
cs.description = escapeText(server.getDescription());
cs.url = server.getUrl();
cs.variables = this.fromServerVariables(server.getVariables());
codegenServers.add(cs);
}
return codegenServers;
}
@Override
public List<CodegenServerVariable> fromServerVariables(Map<String, ServerVariable> variables) {
if (variables == null) {
return Collections.emptyList();
}
List<CodegenServerVariable> codegenServerVariables = new LinkedList<>();
for (Entry<String, ServerVariable> variableEntry : variables.entrySet()) {
CodegenServerVariable codegenServerVariable = new CodegenServerVariable();
ServerVariable variable = variableEntry.getValue();
codegenServerVariable.defaultValue = variable.getDefault();
codegenServerVariable.description = escapeText(variable.getDescription());
codegenServerVariable.enumValues = variable.getEnum();
codegenServerVariable.name = variableEntry.getKey();
codegenServerVariables.add(codegenServerVariable);
}
return codegenServerVariables;
}
} }

View File

@ -286,7 +286,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
private void generateModelDocumentation(List<File> files, Map<String, Object> models, String modelName) throws IOException { private void generateModelDocumentation(List<File> files, Map<String, Object> models, String modelName) throws IOException {
for (String templateName : config.modelDocTemplateFiles().keySet()) { for (String templateName : config.modelDocTemplateFiles().keySet()) {
String docExtension = config.getDocExtension(); String docExtension = config.getDocExtension();
String suffix = docExtension!=null ? docExtension : config.modelDocTemplateFiles().get(templateName); String suffix = docExtension != null ? docExtension : config.modelDocTemplateFiles().get(templateName);
String filename = config.modelDocFileFolder() + File.separator + config.toModelDocFilename(modelName) + suffix; String filename = config.modelDocFileFolder() + File.separator + config.toModelDocFilename(modelName) + suffix;
if (!config.shouldOverwrite(filename)) { if (!config.shouldOverwrite(filename)) {
LOGGER.info("Skipped overwriting " + filename); LOGGER.info("Skipped overwriting " + filename);
@ -382,6 +382,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
} */ } */
}); });
Boolean skipFormModel = System.getProperty(CodegenConstants.SKIP_FORM_MODEL) != null ?
Boolean.valueOf(System.getProperty(CodegenConstants.SKIP_FORM_MODEL)) :
getGeneratorPropertyDefaultSwitch(CodegenConstants.SKIP_FORM_MODEL, false);
// process models only // process models only
for (String name : modelKeys) { for (String name : modelKeys) {
try { try {
@ -393,8 +397,13 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
// don't generate models that are not used as object (e.g. form parameters) // don't generate models that are not used as object (e.g. form parameters)
if (unusedModels.contains(name)) { if (unusedModels.contains(name)) {
LOGGER.debug("Model " + name + " not generated since it's marked as unused (due to form parameters)"); if (Boolean.FALSE.equals(skipFormModel)) {
continue; // if skipFormModel sets to true, still generate the model and log the result
LOGGER.info("Model " + name + " (marked as unused due to form parameters) is generated due to skipFormModel=false (default)");
} else {
LOGGER.info("Model " + name + " not generated since it's marked as unused (due to form parameters) and skipFormModel set to true");
continue;
}
} }
Schema schema = schemas.get(name); Schema schema = schemas.get(name);
@ -754,6 +763,12 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
bundle.put("hasAuthMethods", true); bundle.put("hasAuthMethods", true);
} }
List<CodegenServer> servers = config.fromServers(openAPI.getServers());
if (servers != null && !servers.isEmpty()) {
bundle.put("servers", servers);
bundle.put("hasServers", true);
}
if (openAPI.getExternalDocs() != null) { if (openAPI.getExternalDocs() != null) {
bundle.put("externalDocs", openAPI.getExternalDocs()); bundle.put("externalDocs", openAPI.getExternalDocs());
} }

View File

@ -238,7 +238,7 @@ public class InlineModelResolver {
} }
} else if (property instanceof MapSchema) { } else if (property instanceof MapSchema) {
MapSchema mp = (MapSchema) property; MapSchema mp = (MapSchema) property;
Schema innerProperty = (Schema) mp.getAdditionalProperties(); Schema innerProperty = ModelUtils.getAdditionalProperties(mp);
if (innerProperty instanceof ObjectSchema) { if (innerProperty instanceof ObjectSchema) {
ObjectSchema op = (ObjectSchema) innerProperty; ObjectSchema op = (ObjectSchema) innerProperty;
if (op.getProperties() != null && op.getProperties().size() > 0) { if (op.getProperties() != null && op.getProperties().size() > 0) {
@ -431,7 +431,7 @@ public class InlineModelResolver {
} }
} }
if (ModelUtils.isMapSchema(property)) { if (ModelUtils.isMapSchema(property)) {
Schema inner = (Schema) property.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(property);
if (inner instanceof ObjectSchema) { if (inner instanceof ObjectSchema) {
ObjectSchema op = (ObjectSchema) inner; ObjectSchema op = (ObjectSchema) inner;
if (op.getProperties() != null && op.getProperties().size() > 0) { if (op.getProperties() != null && op.getProperties().size() > 0) {
@ -519,7 +519,7 @@ public class InlineModelResolver {
model.setDescription(description); model.setDescription(description);
model.setName(object.getName()); model.setName(object.getName());
model.setExample(example); model.setExample(example);
model.setItems((Schema) object.getAdditionalProperties()); model.setItems(ModelUtils.getAdditionalProperties(object));
return model; return model;
} }

View File

@ -21,6 +21,7 @@ import io.swagger.v3.parser.core.models.AuthorizationValue;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
@ -39,8 +40,11 @@ public class AuthParser {
for (String part : parts) { for (String part : parts) {
String[] kvPair = part.split(":"); String[] kvPair = part.split(":");
if (kvPair.length == 2) { if (kvPair.length == 2) {
// FIXME replace the deprecated method by decode(string, encoding). Which encoding is used ? Default UTF-8 ? try {
auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0]), URLDecoder.decode(kvPair[1]), "header")); auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0], "UTF-8"), URLDecoder.decode(kvPair[1], "UTF-8"), "header"));
} catch (UnsupportedEncodingException e) {
LOGGER.warn(e.getMessage());
}
} }
} }
} }

View File

@ -19,16 +19,33 @@ package org.openapitools.codegen.config;
import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonAnySetter;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.*;
import org.openapitools.codegen.auth.AuthParser;
import io.swagger.parser.OpenAPIParser; import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.AuthorizationValue; import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.ParseOptions;
import io.swagger.v3.parser.core.models.SwaggerParseResult; import io.swagger.v3.parser.core.models.SwaggerParseResult;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
import org.openapitools.codegen.languages.*; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.ClientOpts;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConfigLoader;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.SpecValidationException;
import org.openapitools.codegen.auth.AuthParser;
import org.openapitools.codegen.languages.CSharpNancyFXServerCodegen;
import org.openapitools.codegen.languages.CppQt5ClientCodegen;
import org.openapitools.codegen.languages.CppRestSdkClientCodegen;
import org.openapitools.codegen.languages.CppTizenClientCodegen;
import org.openapitools.codegen.languages.JavaJerseyServerCodegen;
import org.openapitools.codegen.languages.PhpLumenServerCodegen;
import org.openapitools.codegen.languages.PhpSlimServerCodegen;
import org.openapitools.codegen.languages.PhpZendExpressivePathHandlerServerCodegen;
import org.openapitools.codegen.languages.RubySinatraServerCodegen;
import org.openapitools.codegen.languages.ScalaAkkaClientCodegen;
import org.openapitools.codegen.languages.ScalaHttpClientCodegen;
import org.openapitools.codegen.languages.SwiftClientCodegen;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -40,6 +57,7 @@ import java.nio.file.Paths;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -139,7 +157,7 @@ public class CodegenConfigurator implements Serializable {
public CodegenConfigurator setGeneratorName(final String generatorName) { public CodegenConfigurator setGeneratorName(final String generatorName) {
if (nameMigrationMap.containsKey(generatorName)) { if (nameMigrationMap.containsKey(generatorName)) {
String newValue = nameMigrationMap.get(generatorName); String newValue = nameMigrationMap.get(generatorName);
LOGGER.warn(String.format("The name '%s' is a deprecated. Please update to the new name of '%s'.", generatorName, newValue)); LOGGER.warn(String.format(Locale.ROOT, "The name '%s' is a deprecated. Please update to the new name of '%s'.", generatorName, newValue));
this.generatorName = newValue; this.generatorName = newValue;
} else { } else {
this.generatorName = generatorName; this.generatorName = generatorName;

View File

@ -236,10 +236,10 @@ public class ExampleGenerator {
Map<String, Object> mp = new HashMap<String, Object>(); Map<String, Object> mp = new HashMap<String, Object>();
if (property.getName() != null) { if (property.getName() != null) {
mp.put(property.getName(), mp.put(property.getName(),
resolvePropertyToExample(propertyName, mediaType, (Schema) property.getAdditionalProperties(), processedModels)); resolvePropertyToExample(propertyName, mediaType, ModelUtils.getAdditionalProperties(property), processedModels));
} else { } else {
mp.put("key", mp.put("key",
resolvePropertyToExample(propertyName, mediaType, (Schema) property.getAdditionalProperties(), processedModels)); resolvePropertyToExample(propertyName, mediaType, ModelUtils.getAdditionalProperties(property), processedModels));
} }
return mp; return mp;
} else if (ModelUtils.isUUIDSchema(property)) { } else if (ModelUtils.isUUIDSchema(property)) {

View File

@ -25,9 +25,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.*; import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Locale;
/** /**
* Presents a processing utility for parsing and evaluating files containing common ignore patterns. (.openapi-generator-ignore) * Presents a processing utility for parsing and evaluating files containing common ignore patterns. (.openapi-generator-ignore)
@ -82,30 +84,30 @@ public class CodegenIgnoreProcessor {
loadCodegenRules(targetIgnoreFile); loadCodegenRules(targetIgnoreFile);
this.ignoreFile = targetIgnoreFile; this.ignoreFile = targetIgnoreFile;
} catch (IOException e) { } catch (IOException e) {
LOGGER.error(String.format("Could not process %s.", targetIgnoreFile.getName()), e.getMessage()); LOGGER.error(String.format(Locale.ROOT, "Could not process %s.", targetIgnoreFile.getName()), e.getMessage());
} }
} else if (!".swagger-codegen-ignore".equals(targetIgnoreFile.getName())) { } else if (!".swagger-codegen-ignore".equals(targetIgnoreFile.getName())) {
final File legacyIgnoreFile = new File(targetIgnoreFile.getParentFile(), ".swagger-codegen-ignore"); final File legacyIgnoreFile = new File(targetIgnoreFile.getParentFile(), ".swagger-codegen-ignore");
if (legacyIgnoreFile.exists() && legacyIgnoreFile.isFile()) { if (legacyIgnoreFile.exists() && legacyIgnoreFile.isFile()) {
LOGGER.info(String.format("Legacy support: '%s' file renamed to '%s'.", legacyIgnoreFile.getName(), targetIgnoreFile.getName())); LOGGER.info(String.format(Locale.ROOT, "Legacy support: '%s' file renamed to '%s'.", legacyIgnoreFile.getName(), targetIgnoreFile.getName()));
try { try {
Files.move(legacyIgnoreFile, targetIgnoreFile); Files.move(legacyIgnoreFile, targetIgnoreFile);
loadFromFile(targetIgnoreFile); loadFromFile(targetIgnoreFile);
} catch (IOException e) { } catch (IOException e) {
LOGGER.error(String.format("Could not rename file: %s", e.getMessage())); LOGGER.error(String.format(Locale.ROOT, "Could not rename file: %s", e.getMessage()));
} }
} else { } else {
// log info message // log info message
LOGGER.info(String.format("No %s file found.", targetIgnoreFile.getName())); LOGGER.info(String.format(Locale.ROOT, "No %s file found.", targetIgnoreFile.getName()));
} }
} else { } else {
// log info message // log info message
LOGGER.info(String.format("No %s file found.", targetIgnoreFile.getName())); LOGGER.info(String.format(Locale.ROOT, "No %s file found.", targetIgnoreFile.getName()));
} }
} }
void loadCodegenRules(final File codegenIgnore) throws IOException { void loadCodegenRules(final File codegenIgnore) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(codegenIgnore))) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(codegenIgnore), Charset.forName("UTF-8")))) {
String line; String line;
// NOTE: Comments that start with a : (e.g. //:) are pulled from git documentation for .gitignore // NOTE: Comments that start with a : (e.g. //:) are pulled from git documentation for .gitignore

View File

@ -183,7 +183,6 @@ public abstract class Rule {
} }
} catch (ParserException e) { } catch (ParserException e) {
e.printStackTrace();
return new InvalidRule(null, definition, e.getMessage()); return new InvalidRule(null, definition, e.getMessage());
} }

View File

@ -19,13 +19,11 @@ package org.openapitools.codegen.languages;
import com.samskivert.mustache.Escapers; import com.samskivert.mustache.Escapers;
import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponse;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
@ -43,6 +41,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
abstract public class AbstractAdaCodegen extends DefaultCodegen implements CodegenConfig { abstract public class AbstractAdaCodegen extends DefaultCodegen implements CodegenConfig {
@ -180,7 +179,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
} }
public String toFilename(String name) { public String toFilename(String name) {
return name.replace(".", "-").toLowerCase(); return name.replace(".", "-").toLowerCase(Locale.ROOT);
} }
/** /**
@ -329,7 +328,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
return getTypeDeclaration(inner) + "_Vectors.Vector"; return getTypeDeclaration(inner) + "_Vectors.Vector";
} }
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
String name = getTypeDeclaration(inner) + "_Map"; String name = getTypeDeclaration(inner) + "_Map";
if (name.startsWith("Swagger.")) { if (name.startsWith("Swagger.")) {
return name; return name;
@ -391,7 +390,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
String mt = media.get("mediaType"); String mt = media.get("mediaType");
if (mt != null) { if (mt != null) {
mt = mt.replace('/', '_'); mt = mt.replace('/', '_');
media.put("adaMediaType", mt.toUpperCase()); media.put("adaMediaType", mt.toUpperCase(Locale.ROOT));
count++; count++;
} }
} }

View File

@ -18,12 +18,12 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import java.util.*; import java.util.*;
import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenProperty; import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
@ -90,7 +90,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
// sanitize name // sanitize name
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
if (name.toLowerCase().matches("^_*class$")) { if (name.toLowerCase(Locale.ROOT).matches("^_*class$")) {
return "propertyClass"; return "propertyClass";
} }
@ -107,7 +107,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} }
if (startsWithTwoUppercaseLetters(name)) { if (startsWithTwoUppercaseLetters(name)) {
name = name.substring(0, 2).toLowerCase() + name.substring(2); name = name.substring(0, 2).toLowerCase(Locale.ROOT) + name.substring(2);
} }
// camelize (lower first character) the variable name // camelize (lower first character) the variable name
@ -125,7 +125,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
private boolean startsWithTwoUppercaseLetters(String name) { private boolean startsWithTwoUppercaseLetters(String name) {
boolean startsWithTwoUppercaseLetters = false; boolean startsWithTwoUppercaseLetters = false;
if (name.length() > 1) { if (name.length() > 1) {
startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase()); startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase(Locale.ROOT));
} }
return startsWithTwoUppercaseLetters; return startsWithTwoUppercaseLetters;
} }
@ -196,7 +196,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} }
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
if (inner == null) { if (inner == null) {
LOGGER.warn(p.getName() + "(map property) does not have a proper inner type defined"); LOGGER.warn(p.getName() + "(map property) does not have a proper inner type defined");
@ -225,15 +225,15 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
return null; return null;
} }
return String.format(pattern, getTypeDeclaration(ap.getItems())); return String.format(Locale.ROOT, pattern, getTypeDeclaration(ap.getItems()));
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
final MapSchema ap = (MapSchema) p; final MapSchema ap = (MapSchema) p;
final String pattern = "new HashMap<%s>()"; final String pattern = "new HashMap<%s>()";
if (ap.getAdditionalProperties() == null) { if (ModelUtils.getAdditionalProperties(ap) == null) {
return null; return null;
} }
return String.format(pattern, String.format("String, %s", getTypeDeclaration((Schema) ap.getAdditionalProperties()))); return String.format(Locale.ROOT, pattern, String.format(Locale.ROOT, "String, %s", getTypeDeclaration(ModelUtils.getAdditionalProperties(ap))));
} else if (ModelUtils.isLongSchema(p)) { } else if (ModelUtils.isLongSchema(p)) {
if (p.getDefault() != null) { if (p.getDefault() != null) {
return p.getDefault().toString() + "l"; return p.getDefault().toString() + "l";
@ -297,7 +297,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
p.example = "'" + p.example + "'"; p.example = "'" + p.example + "'";
} else if ("".equals(p.example) || p.example == null && p.dataType != "Object") { } else if ("".equals(p.example) || p.example == null && p.dataType != "Object") {
// Get an example object from the generated model // Get an example object from the generated model
if (!isReservedWord(p.dataType.toLowerCase())) { if (!isReservedWord(p.dataType.toLowerCase(Locale.ROOT))) {
p.example = p.dataType + ".getExample()"; p.example = p.dataType + ".getExample()";
} }
} else { } else {
@ -332,7 +332,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} else if (example.isEmpty()) { } else if (example.isEmpty()) {
example = "2000, 1, 23"; example = "2000, 1, 23";
} else { } else {
LOGGER.warn(String.format("The example provided for property '%s' is not a valid RFC3339 date. Defaulting to '2000-01-23'. [%s]", p LOGGER.warn(String.format(Locale.ROOT, "The example provided for property '%s' is not a valid RFC3339 date. Defaulting to '2000-01-23'. [%s]", p
.getName(), example)); .getName(), example));
example = "2000, 1, 23"; example = "2000, 1, 23";
} }
@ -343,7 +343,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} else if (example.isEmpty()) { } else if (example.isEmpty()) {
example = "2000, 1, 23, 4, 56, 7"; example = "2000, 1, 23, 4, 56, 7";
} else { } else {
LOGGER.warn(String.format("The example provided for property '%s' is not a valid RFC3339 datetime. Defaulting to '2000-01-23T04-56-07Z'. [%s]", p LOGGER.warn(String.format(Locale.ROOT, "The example provided for property '%s' is not a valid RFC3339 datetime. Defaulting to '2000-01-23T04-56-07Z'. [%s]", p
.getName(), example)); .getName(), example));
example = "2000, 1, 23, 4, 56, 7"; example = "2000, 1, 23, 4, 56, 7";
} }
@ -366,7 +366,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} else if (ModelUtils.isLongSchema(p)) { } else if (ModelUtils.isLongSchema(p)) {
example = example.isEmpty() ? "123456789L" : example + "L"; example = example.isEmpty() ? "123456789L" : example + "L";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
example = "new " + getTypeDeclaration(p) + "{'key'=>" + toExampleValue((Schema) p.getAdditionalProperties()) + "}"; example = "new " + getTypeDeclaration(p) + "{'key'=>" + toExampleValue(ModelUtils.getAdditionalProperties(p)) + "}";
} else if (ModelUtils.isPasswordSchema(p)) { } else if (ModelUtils.isPasswordSchema(p)) {
example = example.isEmpty() ? "password123" : escapeText(example); example = example.isEmpty() ? "password123" : escapeText(example);
@ -526,7 +526,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(value) != null) { if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase(); return getSymbolName(value).toUpperCase(Locale.ROOT);
} }
// number // number
@ -540,7 +540,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} }
// string // string
String var = value.replaceAll("\\W+", "_").toUpperCase(); String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) { if (var.matches("\\d.*")) {
return "_" + var; return "_" + var;
} else { } else {

View File

@ -234,7 +234,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
} }
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
LOGGER.warn(String.format("%s is not used by C# generators. Please use %s", LOGGER.warn(String.format(Locale.ROOT, "%s is not used by C# generators. Please use %s",
CodegenConstants.INVOKER_PACKAGE, CodegenConstants.PACKAGE_NAME)); CodegenConstants.INVOKER_PACKAGE, CodegenConstants.PACKAGE_NAME));
} }
@ -313,9 +313,9 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
if (additionalProperties.containsKey(CodegenConstants.INTERFACE_PREFIX)) { if (additionalProperties.containsKey(CodegenConstants.INTERFACE_PREFIX)) {
String useInterfacePrefix = additionalProperties.get(CodegenConstants.INTERFACE_PREFIX).toString(); String useInterfacePrefix = additionalProperties.get(CodegenConstants.INTERFACE_PREFIX).toString();
if ("false".equals(useInterfacePrefix.toLowerCase())) { if ("false".equals(useInterfacePrefix.toLowerCase(Locale.ROOT))) {
setInterfacePrefix(""); setInterfacePrefix("");
} else if (!"true".equals(useInterfacePrefix.toLowerCase())) { } else if (!"true".equals(useInterfacePrefix.toLowerCase(Locale.ROOT))) {
// NOTE: if user passes "true" explicitly, we use the default I- prefix. The other supported case here is a custom prefix. // NOTE: if user passes "true" explicitly, we use the default I- prefix. The other supported case here is a custom prefix.
setInterfacePrefix(sanitizeName(useInterfacePrefix)); setInterfacePrefix(sanitizeName(useInterfacePrefix));
} }
@ -768,8 +768,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
// NOTE: typeMapping here supports things like string/String, long/Long, datetime/DateTime as lowercase keys. // NOTE: typeMapping here supports things like string/String, long/Long, datetime/DateTime as lowercase keys.
// Should we require explicit casing here (values are not insensitive). // Should we require explicit casing here (values are not insensitive).
// TODO avoid using toLowerCase as typeMapping should be case-sensitive // TODO avoid using toLowerCase as typeMapping should be case-sensitive
if (typeMapping.containsKey(openAPIType.toLowerCase())) { if (typeMapping.containsKey(openAPIType.toLowerCase(Locale.ROOT))) {
type = typeMapping.get(openAPIType.toLowerCase()); type = typeMapping.get(openAPIType.toLowerCase(Locale.ROOT));
if (languageSpecificPrimitives.contains(type)) { if (languageSpecificPrimitives.contains(type)) {
return type; return type;
} }
@ -811,7 +811,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
return getArrayTypeDeclaration((ArraySchema) p); return getArrayTypeDeclaration((ArraySchema) p);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
// Should we also support maps of maps? // Should we also support maps of maps?
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<string, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<string, " + getTypeDeclaration(inner) + ">";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);

View File

@ -17,15 +17,11 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import static com.google.common.base.Strings.isNullOrEmpty;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
@ -46,9 +42,12 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import static com.google.common.base.Strings.isNullOrEmpty;
public abstract class AbstractEiffelCodegen extends DefaultCodegen implements CodegenConfig { public abstract class AbstractEiffelCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractEiffelCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(AbstractEiffelCodegen.class);
@ -169,13 +168,13 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override @Override
public String toParamName(String name) { public String toParamName(String name) {
// params should be lowercase. E.g. "person: PERSON" // params should be lowercase. E.g. "person: PERSON"
return toVarName(name).toLowerCase(); return toVarName(name).toLowerCase(Locale.ROOT);
} }
@Override @Override
public String toModelName(String name) { public String toModelName(String name) {
// phone_number => PHONE_NUMBER // phone_number => PHONE_NUMBER
return toModelFilename(name).toUpperCase(); return toModelFilename(name).toUpperCase(Locale.ROOT);
} }
@Override @Override
@ -221,7 +220,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override @Override
public String toApiTestFilename(String name) { public String toApiTestFilename(String name) {
return toApiName(name).toLowerCase() + "_test"; return toApiName(name).toLowerCase(Locale.ROOT) + "_test";
} }
@Override @Override
@ -229,7 +228,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
if (name.length() == 0) { if (name.length() == 0) {
return "DEFAULT_API"; return "DEFAULT_API";
} }
return name.toUpperCase() + "_API"; return name.toUpperCase(Locale.ROOT) + "_API";
} }
/** /**
@ -269,7 +268,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
} }
} }
if (!isNullOrEmpty(model.parentSchema)) { if (!isNullOrEmpty(model.parentSchema)) {
model.parentSchema = model.parentSchema.toLowerCase(); model.parentSchema = model.parentSchema.toLowerCase(Locale.ROOT);
} }
} }
@ -290,7 +289,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return "LIST [" + getTypeDeclaration(inner) + "]"; return "LIST [" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} }
@ -352,7 +351,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
for (CodegenOperation operation : operations) { for (CodegenOperation operation : operations) {
// http method verb conversion (e.g. PUT => Put) // http method verb conversion (e.g. PUT => Put)
operation.httpMethod = camelize(operation.httpMethod.toLowerCase()); operation.httpMethod = camelize(operation.httpMethod.toLowerCase(Locale.ROOT));
} }
// remove model imports to avoid error // remove model imports to avoid error
@ -557,7 +556,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
Schema additionalProperties2 = (Schema) p.getAdditionalProperties(); Schema additionalProperties2 = ModelUtils.getAdditionalProperties(p);
String type = additionalProperties2.getType(); String type = additionalProperties2.getType();
if (null == type) { if (null == type) {
LOGGER.error("No Type defined for Additional Schema " + additionalProperties2 + "\n" // LOGGER.error("No Type defined for Additional Schema " + additionalProperties2 + "\n" //
@ -575,7 +574,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
} }
public String unCamelize(String name) { public String unCamelize(String name) {
return name.replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(); return name.replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(Locale.ROOT);
} }
public String toEiffelFeatureStyle(String operationId) { public String toEiffelFeatureStyle(String operationId) {

View File

@ -17,22 +17,16 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.core.util.Yaml;
import java.util.*;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.*;
public abstract class AbstractGoCodegen extends DefaultCodegen implements CodegenConfig { public abstract class AbstractGoCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGoCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGoCodegen.class);
@ -258,7 +252,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return "[]" + getTypeDeclaration(inner); return "[]" + getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string]" + getTypeDeclaration(inner); return getSchemaType(p) + "[string]" + getTypeDeclaration(inner);
} }
//return super.getTypeDeclaration(p); //return super.getTypeDeclaration(p);
@ -335,7 +329,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation"); List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation operation : operations) { for (CodegenOperation operation : operations) {
// http method verb conversion (e.g. PUT => Put) // http method verb conversion (e.g. PUT => Put)
operation.httpMethod = camelize(operation.httpMethod.toLowerCase()); operation.httpMethod = camelize(operation.httpMethod.toLowerCase(Locale.ROOT));
} }
// remove model imports to avoid error // remove model imports to avoid error
@ -389,7 +383,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
} else { } else {
// Map optional type to dataType // Map optional type to dataType
param.vendorExtensions.put("x-optionalDataType", param.vendorExtensions.put("x-optionalDataType",
param.dataType.substring(0, 1).toUpperCase() + param.dataType.substring(1)); param.dataType.substring(0, 1).toUpperCase(Locale.ROOT) + param.dataType.substring(1));
} }
} }
@ -562,11 +556,11 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(name) != null) { if (getSymbolName(name) != null) {
return getSymbolName(name).toUpperCase(); return getSymbolName(name).toUpperCase(Locale.ROOT);
} }
// string // string
String enumName = sanitizeName(underscore(name).toUpperCase()); String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", ""); enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", ""); enumName = enumName.replaceFirst("_$", "");
@ -581,7 +575,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
@Override @Override
public String toEnumName(CodegenProperty property) { public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase(); String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum // remove [] for array or map of enum
enumName = enumName.replace("[]", ""); enumName = enumName.replace("[]", "");

View File

@ -49,6 +49,7 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -564,7 +565,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
// sanitize name // sanitize name
name = sanitizeName(name, "\\W-[\\$]"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. name = sanitizeName(name, "\\W-[\\$]"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
if (name.toLowerCase().matches("^_*class$")) { if (name.toLowerCase(Locale.ROOT).matches("^_*class$")) {
return "propertyClass"; return "propertyClass";
} }
@ -578,7 +579,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
if (startsWithTwoUppercaseLetters(name)) { if (startsWithTwoUppercaseLetters(name)) {
name = name.substring(0, 2).toLowerCase() + name.substring(2); name = name.substring(0, 2).toLowerCase(Locale.ROOT) + name.substring(2);
} }
// If name contains special chars -> replace them. // If name contains special chars -> replace them.
@ -604,7 +605,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
private boolean startsWithTwoUppercaseLetters(String name) { private boolean startsWithTwoUppercaseLetters(String name) {
boolean startsWithTwoUppercaseLetters = false; boolean startsWithTwoUppercaseLetters = false;
if (name.length() > 1) { if (name.length() > 1) {
startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase()); startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase(Locale.ROOT));
} }
return startsWithTwoUppercaseLetters; return startsWithTwoUppercaseLetters;
} }
@ -679,7 +680,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
if (inner == null) { if (inner == null) {
LOGGER.warn(p.getName() + "(map property) does not have a proper inner type defined. Default to string"); LOGGER.warn(p.getName() + "(map property) does not have a proper inner type defined. Default to string");
inner = new StringSchema().description("TODO default missing array inner type to string"); inner = new StringSchema().description("TODO default missing array inner type to string");
@ -720,7 +721,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
} }
return String.format(pattern, typeDeclaration); return String.format(Locale.ROOT, pattern, typeDeclaration);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
final String pattern; final String pattern;
if (fullJavaUtil) { if (fullJavaUtil) {
@ -728,11 +729,11 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} else { } else {
pattern = "new HashMap<%s>()"; pattern = "new HashMap<%s>()";
} }
if (p.getAdditionalProperties() == null) { if (ModelUtils.getAdditionalProperties(p) == null) {
return null; return null;
} }
String typeDeclaration = String.format("String, %s", getTypeDeclaration((Schema) p.getAdditionalProperties())); String typeDeclaration = String.format(Locale.ROOT, "String, %s", getTypeDeclaration(ModelUtils.getAdditionalProperties(p)));
Object java8obj = additionalProperties.get("java8"); Object java8obj = additionalProperties.get("java8");
if (java8obj != null) { if (java8obj != null) {
Boolean java8 = Boolean.valueOf(java8obj.toString()); Boolean java8 = Boolean.valueOf(java8obj.toString());
@ -741,7 +742,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
} }
return String.format(pattern, typeDeclaration); return String.format(Locale.ROOT, pattern, typeDeclaration);
} else if (ModelUtils.isIntegerSchema(p)) { } else if (ModelUtils.isIntegerSchema(p)) {
if (p.getDefault() != null) { if (p.getDefault() != null) {
if (SchemaTypeUtil.INTEGER64_FORMAT.equals(p.getFormat())) { if (SchemaTypeUtil.INTEGER64_FORMAT.equals(p.getFormat())) {
@ -1049,7 +1050,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(value) != null) { if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase(); return getSymbolName(value).toUpperCase(Locale.ROOT);
} }
// number // number
@ -1063,7 +1064,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
// string // string
String var = value.replaceAll("\\W+", "_").toUpperCase(); String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) { if (var.matches("\\d.*")) {
return "_" + var; return "_" + var;
} else { } else {

View File

@ -17,16 +17,13 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -34,6 +31,7 @@ import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public abstract class AbstractKotlinCodegen extends DefaultCodegen implements CodegenConfig { public abstract class AbstractKotlinCodegen extends DefaultCodegen implements CodegenConfig {
@ -220,7 +218,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
@Override @Override
public String escapeReservedWord(String name) { public String escapeReservedWord(String name) {
// TODO: Allow enum escaping as an option (e.g. backticks vs append/prepend underscore vs match model property escaping). // TODO: Allow enum escaping as an option (e.g. backticks vs append/prepend underscore vs match model property escaping).
return String.format("`%s`", name); return String.format(Locale.ROOT, "`%s`", name);
} }
@Override @Override
@ -282,7 +280,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
return getArrayTypeDeclaration((ArraySchema) p); return getArrayTypeDeclaration((ArraySchema) p);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
// Maps will be keyed only by primitive Kotlin string // Maps will be keyed only by primitive Kotlin string
return getSchemaType(p) + "<kotlin.String, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<kotlin.String, " + getTypeDeclaration(inner) + ">";
@ -414,7 +412,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
modified = underscore(modified); modified = underscore(modified);
break; break;
case UPPERCASE: case UPPERCASE:
modified = modified.toUpperCase(); modified = modified.toUpperCase(Locale.ROOT);
break; break;
} }
@ -536,7 +534,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
} }
private String titleCase(final String input) { private String titleCase(final String input) {
return input.substring(0, 1).toUpperCase() + input.substring(1); return input.substring(0, 1).toUpperCase(Locale.ROOT) + input.substring(1);
} }
@Override @Override

View File

@ -1,5 +1,4 @@
/* /*ap Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
* Copyright 2018 SmartBear Software * Copyright 2018 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -17,6 +16,9 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
@ -24,23 +26,20 @@ import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty; import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import io.swagger.v3.oas.models.media.*; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractPhpCodegen extends DefaultCodegen implements CodegenConfig { public abstract class AbstractPhpCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPhpCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPhpCodegen.class);
@ -238,6 +237,9 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
// apache v2 license // apache v2 license
// supportingFiles.add(new SupportingFile("LICENSE", "", "LICENSE")); // supportingFiles.add(new SupportingFile("LICENSE", "", "LICENSE"));
// all PHP codegens requires Composer, it means that we need to exclude from SVN at least vendor folder
supportingFiles.add(new SupportingFile(".gitignore", "", ".gitignore"));
} }
public String getPackageName() { public String getPackageName() {
@ -328,7 +330,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getTypeDeclaration(inner) + "[]"; return getTypeDeclaration(inner) + "[]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]";
} else if (StringUtils.isNotBlank(p.get$ref())) { // model } else if (StringUtils.isNotBlank(p.get$ref())) { // model
String type = super.getTypeDeclaration(p); String type = super.getTypeDeclaration(p);
@ -623,7 +625,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(name) != null) { if (getSymbolName(name) != null) {
return (getSymbolName(name)).toUpperCase(); return (getSymbolName(name)).toUpperCase(Locale.ROOT);
} }
// number // number
@ -636,7 +638,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
} }
// string // string
String enumName = sanitizeName(underscore(name).toUpperCase()); String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", ""); enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", ""); enumName = enumName.replaceFirst("_$", "");
@ -649,7 +651,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
@Override @Override
public String toEnumName(CodegenProperty property) { public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase(); String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum // remove [] for array or map of enum
enumName = enumName.replace("[]", ""); enumName = enumName.replace("[]", "");

View File

@ -19,12 +19,14 @@ package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.*; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale;
abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConfig { abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRubyCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRubyCodegen.class);
@ -88,7 +90,7 @@ abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ((ArraySchema) schema).getItems(); Schema inner = ((ArraySchema) schema).getItems();
return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
Schema inner = (Schema) schema.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(schema);
return getSchemaType(schema) + "<String, " + getTypeDeclaration(inner) + ">"; return getSchemaType(schema) + "<String, " + getTypeDeclaration(inner) + ">";
} }
@ -116,7 +118,7 @@ abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConf
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
// if it's all uppper case, convert to lower case // if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) { if (name.matches("^[A-Z_]*$")) {
name = name.toLowerCase(); name = name.toLowerCase(Locale.ROOT);
} }
// camelize (lower first character) the variable name // camelize (lower first character) the variable name

View File

@ -181,7 +181,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
} }
@ -206,7 +206,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties()); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return instantiationTypes.get("map") + "[String, " + inner + "]"; return instantiationTypes.get("map") + "[String, " + inner + "]";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;
@ -235,7 +235,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
} else if (ModelUtils.isIntegerSchema(p)) { } else if (ModelUtils.isIntegerSchema(p)) {
return null; return null;
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties()); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "new HashMap[String, " + inner + "]() "; return "new HashMap[String, " + inner + "]() ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;

View File

@ -227,7 +227,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "{ [key: string]: " + getTypeDeclaration(inner) + "; }"; return "{ [key: string]: " + getTypeDeclaration(inner) + "; }";
} else if (ModelUtils.isFileSchema(p)) { } else if (ModelUtils.isFileSchema(p)) {
return "any"; return "any";
@ -246,7 +246,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
inner = mp1.getItems(); inner = mp1.getItems();
return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">"; return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
inner = (Schema) p.getAdditionalProperties(); inner = ModelUtils.getAdditionalProperties(p);
return "{ [key: string]: " + this.getParameterDataType(parameter, inner) + "; }"; return "{ [key: string]: " + this.getParameterDataType(parameter, inner) + "; }";
} else if (ModelUtils.isStringSchema(p)) { } else if (ModelUtils.isStringSchema(p)) {
// Handle string enums // Handle string enums

View File

@ -17,14 +17,18 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.openapitools.codegen.*;
public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig { public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig {
@ -71,7 +75,7 @@ public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig {
// e.g. petstore.api (package name) => petstore_api (project name) // e.g. petstore.api (package name) => petstore_api (project name)
projectName = packageName.replaceAll("\\.", "_"); projectName = packageName.replaceAll("\\.", "_");
} }
String configBaseName = modelPackage.toLowerCase(); String configBaseName = modelPackage.toLowerCase(Locale.ROOT);
supportingFiles.add(new SupportingFile("gnat-project.mustache", "", toFilename(projectName) + ".gpr")); supportingFiles.add(new SupportingFile("gnat-project.mustache", "", toFilename(projectName) + ".gpr"));
// supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); // supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("config.gpr", "", "config.gpr")); supportingFiles.add(new SupportingFile("config.gpr", "", "config.gpr"));

View File

@ -19,7 +19,6 @@ package org.openapitools.codegen.languages;
import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template; import com.samskivert.mustache.Template;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.CodegenType;
@ -28,6 +27,7 @@ import org.openapitools.codegen.SupportingFile;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.util.Locale;
public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfig { public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfig {
@ -76,7 +76,7 @@ public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfi
// e.g. petstore.api (package name) => petstore_api (project name) // e.g. petstore.api (package name) => petstore_api (project name)
projectName = packageName.replaceAll("\\.", "_"); projectName = packageName.replaceAll("\\.", "_");
} }
String configBaseName = modelPackage.toLowerCase(); String configBaseName = modelPackage.toLowerCase(Locale.ROOT);
supportingFiles.add(new SupportingFile("gnat-project.mustache", "", toFilename(projectName) + ".gpr")); supportingFiles.add(new SupportingFile("gnat-project.mustache", "", toFilename(projectName) + ".gpr"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("config.gpr", "", "config.gpr")); supportingFiles.add(new SupportingFile("config.gpr", "", "config.gpr"));

View File

@ -189,7 +189,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<String, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<String, " + getTypeDeclaration(inner) + ">";
} }

View File

@ -217,6 +217,7 @@ public class ApexClientCodegen extends AbstractApexCodegen {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
Schema inner = ((ArraySchema) p).getItems(); Schema inner = ((ArraySchema) p).getItems();
out = String.format( out = String.format(
Locale.ROOT,
"new List<%s>()", "new List<%s>()",
inner == null ? "Object" : getTypeDeclaration(inner) inner == null ? "Object" : getTypeDeclaration(inner)
); );
@ -227,14 +228,14 @@ public class ApexClientCodegen extends AbstractApexCodegen {
Long def = (Long) p.getDefault(); Long def = (Long) p.getDefault();
out = def == null ? out : def.toString() + "L"; out = def == null ? out : def.toString() + "L";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
String s = inner == null ? "Object" : getTypeDeclaration(inner); String s = inner == null ? "Object" : getTypeDeclaration(inner);
out = String.format("new Map<String, %s>()", s); out = String.format(Locale.ROOT, "new Map<String, %s>()", s);
} else if (ModelUtils.isStringSchema(p)) { } else if (ModelUtils.isStringSchema(p)) {
if (p.getDefault() != null) { if (p.getDefault() != null) {
String def = p.getDefault().toString(); String def = p.getDefault().toString();
if (def != null) { if (def != null) {
out = p.getEnum() == null ? String.format("'%s'", escapeText(def)) : def; out = p.getEnum() == null ? String.format(Locale.ROOT, "'%s'", escapeText(def)) : def;
} }
} }
} else { } else {
@ -270,7 +271,7 @@ public class ApexClientCodegen extends AbstractApexCodegen {
if (apiVersion.matches("^\\d{2}(\\.0)?$")) { if (apiVersion.matches("^\\d{2}(\\.0)?$")) {
return apiVersion.substring(0, 2) + ".0"; return apiVersion.substring(0, 2) + ".0";
} else { } else {
LOGGER.warn(String.format("specified API version is invalid: %s - defaulting to %s", apiVersion, this.apiVersion)); LOGGER.warn(String.format(Locale.ROOT, "specified API version is invalid: %s - defaulting to %s", apiVersion, this.apiVersion));
return this.apiVersion; return this.apiVersion;
} }
} }

View File

@ -17,21 +17,21 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.*; import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.URLPathUtils; import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
import java.util.*; import java.util.Arrays;
import java.util.Locale;
import java.util.Map;
import static java.util.UUID.randomUUID; import static java.util.UUID.randomUUID;
@ -39,7 +39,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
public static final String USE_SWASHBUCKLE = "useSwashbuckle"; public static final String USE_SWASHBUCKLE = "useSwashbuckle";
private String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}"; private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
@SuppressWarnings("hiding") @SuppressWarnings("hiding")
protected Logger LOGGER = LoggerFactory.getLogger(AspNetCoreServerCodegen.class); protected Logger LOGGER = LoggerFactory.getLogger(AspNetCoreServerCodegen.class);
@ -141,7 +141,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
additionalProperties.put(USE_SWASHBUCKLE, useSwashbuckle); additionalProperties.put(USE_SWASHBUCKLE, useSwashbuckle);
} }
additionalProperties.put("dockerTag", packageName.toLowerCase()); additionalProperties.put("dockerTag", packageName.toLowerCase(Locale.ROOT));
apiPackage = packageName + ".Controllers"; apiPackage = packageName + ".Controllers";
modelPackage = packageName + ".Models"; modelPackage = packageName + ".Models";
@ -211,7 +211,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
} }
// Converts, for example, PUT to HttpPut for controller attributes // Converts, for example, PUT to HttpPut for controller attributes
operation.httpMethod = "Http" + operation.httpMethod.substring(0, 1) + operation.httpMethod.substring(1).toLowerCase(); operation.httpMethod = "Http" + operation.httpMethod.substring(0, 1) + operation.httpMethod.substring(1).toLowerCase(Locale.ROOT);
} }
@Override @Override

View File

@ -388,7 +388,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);
@ -637,7 +637,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig {
mapper.writerWithDefaultPrettyPrinter().writeValueAsString( mapper.writerWithDefaultPrettyPrinter().writeValueAsString(
definitions.get(p.dataType).getExample())); definitions.get(p.dataType).getExample()));
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
e.printStackTrace(); LOGGER.warn(e.getMessage(), e);
} }
} else { } else {
/** /**

View File

@ -17,13 +17,9 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import static org.apache.commons.lang3.StringUtils.isEmpty;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
@ -40,8 +36,11 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import static org.apache.commons.lang3.StringUtils.isEmpty;
public class CSharpClientCodegen extends AbstractCSharpCodegen { public class CSharpClientCodegen extends AbstractCSharpCodegen {
@SuppressWarnings({"hiding"}) @SuppressWarnings({"hiding"})
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class);
@ -57,7 +56,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
// Defines the sdk option for targeted frameworks, which differs from targetFramework and targetFrameworkNuget // Defines the sdk option for targeted frameworks, which differs from targetFramework and targetFrameworkNuget
private static final String MCS_NET_VERSION_KEY = "x-mcs-sdk"; private static final String MCS_NET_VERSION_KEY = "x-mcs-sdk";
protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
protected String clientPackage = "Org.OpenAPITools.Client"; protected String clientPackage = "Org.OpenAPITools.Client";
protected String localVariablePrefix = ""; protected String localVariablePrefix = "";
protected String apiDocPath = "docs/"; protected String apiDocPath = "docs/";

View File

@ -17,17 +17,24 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import static com.google.common.base.Strings.isNullOrEmpty; import com.google.common.base.Predicate;
import static org.apache.commons.lang3.StringUtils.capitalize; import com.google.common.collect.ArrayListMultimap;
import static org.openapitools.codegen.CodegenConstants.*; import com.google.common.collect.BiMap;
import static org.openapitools.codegen.CodegenType.SERVER; import com.google.common.collect.HashBiMap;
import static java.util.Arrays.asList; import com.google.common.collect.ImmutableMap;
import static java.util.UUID.randomUUID; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.utils.*; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.*; import org.openapitools.codegen.CodegenModel;
import io.swagger.v3.oas.models.media.*; import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
@ -36,20 +43,34 @@ import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.slf4j.Logger; import static com.google.common.base.Strings.isNullOrEmpty;
import org.slf4j.LoggerFactory; import static java.util.Arrays.asList;
import static java.util.UUID.randomUUID;
import com.google.common.base.Predicate; import static org.apache.commons.lang3.StringUtils.capitalize;
import com.google.common.collect.ArrayListMultimap; import static org.openapitools.codegen.CodegenConstants.INTERFACE_PREFIX;
import com.google.common.collect.BiMap; import static org.openapitools.codegen.CodegenConstants.INTERFACE_PREFIX_DESC;
import com.google.common.collect.HashBiMap; import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE;
import com.google.common.collect.ImmutableMap; import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE_DESC;
import com.google.common.collect.ImmutableSet; import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_GUID;
import com.google.common.collect.Multimap; import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_GUID_DESC;
import static org.openapitools.codegen.CodegenConstants.PACKAGE_NAME;
import static org.openapitools.codegen.CodegenConstants.PACKAGE_VERSION;
import static org.openapitools.codegen.CodegenConstants.RETURN_ICOLLECTION;
import static org.openapitools.codegen.CodegenConstants.RETURN_ICOLLECTION_DESC;
import static org.openapitools.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG;
import static org.openapitools.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC;
import static org.openapitools.codegen.CodegenConstants.SOURCE_FOLDER;
import static org.openapitools.codegen.CodegenConstants.SOURCE_FOLDER_DESC;
import static org.openapitools.codegen.CodegenConstants.USE_COLLECTION;
import static org.openapitools.codegen.CodegenConstants.USE_COLLECTION_DESC;
import static org.openapitools.codegen.CodegenConstants.USE_DATETIME_OFFSET;
import static org.openapitools.codegen.CodegenConstants.USE_DATETIME_OFFSET_DESC;
import static org.openapitools.codegen.CodegenType.SERVER;
public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen { public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpNancyFXServerCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(CSharpNancyFXServerCodegen.class);
@ -64,7 +85,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
private static final Map<String, Predicate<Schema>> propertyToOpenAPITypeMapping = private static final Map<String, Predicate<Schema>> propertyToOpenAPITypeMapping =
createPropertyToOpenAPITypeMapping(); createPropertyToOpenAPITypeMapping();
private String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}"; private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
private final Map<String, DependencyInfo> dependencies = new HashMap<>(); private final Map<String, DependencyInfo> dependencies = new HashMap<>();
private final Set<String> parentModels = new HashSet<>(); private final Set<String> parentModels = new HashSet<>();
@ -185,18 +206,18 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
final String assemblyFramework = namespaceInfo.length > 3 ? namespaceInfo[3].trim() : "net45"; final String assemblyFramework = namespaceInfo.length > 3 ? namespaceInfo[3].trim() : "net45";
if (isNullOrEmpty(model) || isNullOrEmpty(namespaceName)) { if (isNullOrEmpty(model) || isNullOrEmpty(namespaceName)) {
LOGGER.warn(String.format("Could not import: '%s' - invalid namespace: '%s'", model, entry.getValue())); LOGGER.warn(String.format(Locale.ROOT, "Could not import: '%s' - invalid namespace: '%s'", model, entry.getValue()));
importMapping.remove(model); importMapping.remove(model);
} else { } else {
LOGGER.info(String.format("Importing: '%s' from '%s' namespace.", model, namespaceName)); LOGGER.info(String.format(Locale.ROOT, "Importing: '%s' from '%s' namespace.", model, namespaceName));
importMapping.put(model, namespaceName); importMapping.put(model, namespaceName);
} }
if (!isNullOrEmpty(modelClass)) { if (!isNullOrEmpty(modelClass)) {
LOGGER.info(String.format("Mapping: '%s' class to '%s'", model, modelClass)); LOGGER.info(String.format(Locale.ROOT, "Mapping: '%s' class to '%s'", model, modelClass));
modelNameMapping.put(model, modelClass); modelNameMapping.put(model, modelClass);
} }
if (assembly != null && assemblyVersion != null) { if (assembly != null && assemblyVersion != null) {
LOGGER.info(String.format("Adding dependency: '%s', version: '%s', framework: '%s'", LOGGER.info(String.format(Locale.ROOT, "Adding dependency: '%s', version: '%s', framework: '%s'",
assembly, assemblyVersion, assemblyVersion)); assembly, assemblyVersion, assemblyVersion));
dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework)); dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework));
} }
@ -248,7 +269,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
operation.path = operation.path.replace("?", "/"); operation.path = operation.path.replace("?", "/");
} }
if (!isNullOrEmpty(operation.httpMethod)) { if (!isNullOrEmpty(operation.httpMethod)) {
operation.httpMethod = capitalize(operation.httpMethod.toLowerCase()); operation.httpMethod = capitalize(operation.httpMethod.toLowerCase(Locale.ROOT));
} }
} }
@ -280,7 +301,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
for (final CodegenProperty property : parent.vars) { for (final CodegenProperty property : parent.vars) {
final CodegenProperty duplicatedByParent = childPropertiesByName.get(property.name); final CodegenProperty duplicatedByParent = childPropertiesByName.get(property.name);
if (duplicatedByParent != null) { if (duplicatedByParent != null) {
LOGGER.info(String.format("Property: '%s' in '%s' model is inherited from '%s'", LOGGER.info(String.format(Locale.ROOT, "Property: '%s' in '%s' model is inherited from '%s'",
property.name, child.classname, parent.classname)); property.name, child.classname, parent.classname));
duplicatedByParent.isInherited = true; duplicatedByParent.isInherited = true;
final CodegenProperty parentVar = duplicatedByParent.clone(); final CodegenProperty parentVar = duplicatedByParent.clone();
@ -322,7 +343,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
} else { } else {
result = enumName; result = enumName;
} }
LOGGER.debug(String.format("toEnumVarName('%s', %s) = '%s'", name, datatype, enumName)); LOGGER.debug(String.format(Locale.ROOT, "toEnumVarName('%s', %s) = '%s'", name, datatype, enumName));
return result; return result;
} }
@ -334,7 +355,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
} else { } else {
apiName = capitalize(name); apiName = capitalize(name);
} }
LOGGER.debug(String.format("toApiName('%s') = '%s'", name, apiName)); LOGGER.debug(String.format(Locale.ROOT, "toApiName('%s') = '%s'", name, apiName));
return apiName; return apiName;
} }
@ -355,7 +376,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
} else { } else {
result = null; result = null;
} }
LOGGER.debug(String.format("toModelImport('%s') = '%s'", name, result)); LOGGER.debug(String.format(Locale.ROOT, "toModelImport('%s') = '%s'", name, result));
return result; return result;
} }

View File

@ -17,6 +17,11 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
@ -24,16 +29,11 @@ import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.SupportingFile;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.info.*;
import org.apache.commons.lang3.StringUtils;
import java.io.File; import java.io.File;
import java.util.Map;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map;
public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfig { public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final String PROJECT_NAME = "projectName"; private static final String PROJECT_NAME = "projectName";
@ -221,7 +221,7 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi
List<CodegenOperation> ops = (List<CodegenOperation>) objs.get("operation"); List<CodegenOperation> ops = (List<CodegenOperation>) objs.get("operation");
for (CodegenOperation op : ops) { for (CodegenOperation op : ops) {
// Convert httpMethod to lower case, e.g. "get", "post" // Convert httpMethod to lower case, e.g. "get", "post"
op.httpMethod = op.httpMethod.toLowerCase(); op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
} }
return operations; return operations;
} }

View File

@ -19,7 +19,6 @@ package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
@ -32,6 +31,7 @@ import org.openapitools.codegen.utils.ModelUtils;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConfig { public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConfig {
@ -99,7 +99,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);
@ -110,7 +110,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf
Map<String, Object> operations = (Map<String, Object>) objs.get("operations"); Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation"); List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation op : operationList) { for (CodegenOperation op : operationList) {
op.httpMethod = op.httpMethod.toLowerCase(); op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
} }
return objs; return objs;
} }

View File

@ -22,7 +22,6 @@ import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponse;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenOperation;
@ -38,6 +37,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -198,8 +198,8 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> objs, List<Object> allModels) { public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> objs, List<Object> allModels) {
Map<String, Object> operations = (Map<String, Object>) objs.get("operations"); Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
String classname = (String) operations.get("classname"); String classname = (String) operations.get("classname");
operations.put("classnameSnakeUpperCase", DefaultCodegen.underscore(classname).toUpperCase()); operations.put("classnameSnakeUpperCase", DefaultCodegen.underscore(classname).toUpperCase(Locale.ROOT));
operations.put("classnameSnakeLowerCase", DefaultCodegen.underscore(classname).toLowerCase()); operations.put("classnameSnakeLowerCase", DefaultCodegen.underscore(classname).toLowerCase(Locale.ROOT));
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation"); List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation op : operationList) { for (CodegenOperation op : operationList) {
@ -220,7 +220,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
} }
} }
op.httpMethod = op.httpMethod.substring(0, 1).toUpperCase() + op.httpMethod.substring(1).toLowerCase(); op.httpMethod = op.httpMethod.substring(0, 1).toUpperCase(Locale.ROOT) + op.httpMethod.substring(1).toLowerCase(Locale.ROOT);
for (CodegenParameter param : op.allParams) { for (CodegenParameter param : op.allParams) {
if (param.isFormParam) isParsingSupported = false; if (param.isFormParam) isParsingSupported = false;
@ -305,7 +305,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} }
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">";
} }
else if (ModelUtils.isByteArraySchema(p)) { else if (ModelUtils.isByteArraySchema(p)) {
@ -343,7 +343,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
else if (ModelUtils.isByteArraySchema(p)) { else if (ModelUtils.isByteArraySchema(p)) {
return "\"\""; return "\"\"";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties()); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()"; return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;

View File

@ -17,12 +17,15 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.apache.commons.lang3.StringUtils; import io.swagger.v3.oas.models.media.ArraySchema;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.parser.util.SchemaTypeUtil; import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -30,6 +33,7 @@ import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -294,7 +298,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">*"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">*";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<QString, " + getTypeDeclaration(inner) + ">*"; return getSchemaType(p) + "<QString, " + getTypeDeclaration(inner) + ">*";
} }
if (foundationClasses.contains(openAPIType)) { if (foundationClasses.contains(openAPIType)) {
@ -325,7 +329,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
} }
return "0"; return "0";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "new QMap<QString, " + getTypeDeclaration(inner) + ">()"; return "new QMap<QString, " + getTypeDeclaration(inner) + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;
@ -371,7 +375,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
// if it's all uppper case, convert to lower case // if it's all uppper case, convert to lower case
if (varName.matches("^[A-Z_]*$")) { if (varName.matches("^[A-Z_]*$")) {
varName = varName.toLowerCase(); varName = varName.toLowerCase(Locale.ROOT);
} }
// camelize (lower first character) the variable name // camelize (lower first character) the variable name

View File

@ -17,12 +17,14 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.apache.commons.lang3.StringUtils; import io.swagger.v3.oas.models.media.ArraySchema;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.parser.util.SchemaTypeUtil; import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -30,6 +32,7 @@ import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -323,7 +326,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<QString, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<QString, " + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isBinarySchema(p)) { } else if (ModelUtils.isBinarySchema(p)) {
return getSchemaType(p) + "*"; return getSchemaType(p) + "*";
@ -359,7 +362,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement
} }
return "0"; return "0";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "QMap<QString, " + getTypeDeclaration(inner) + ">()"; return "QMap<QString, " + getTypeDeclaration(inner) + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;
@ -407,7 +410,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement
// if it's all uppper case, convert to lower case // if it's all uppper case, convert to lower case
if (varName.matches("^[A-Z_]*$")) { if (varName.matches("^[A-Z_]*$")) {
varName = varName.toLowerCase(); varName = varName.toLowerCase(Locale.ROOT);
} }
// camelize (lower first character) the variable name // camelize (lower first character) the variable name

View File

@ -17,17 +17,13 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import static com.google.common.base.Strings.isNullOrEmpty;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponse;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
@ -42,9 +38,12 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import static com.google.common.base.Strings.isNullOrEmpty;
public class CppRestSdkClientCodegen extends AbstractCppCodegen { public class CppRestSdkClientCodegen extends AbstractCppCodegen {
public static final String DECLSPEC = "declspec"; public static final String DECLSPEC = "declspec";
@ -189,10 +188,10 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
additionalProperties.put("modelNamespaceDeclarations", modelPackage.split("\\.")); additionalProperties.put("modelNamespaceDeclarations", modelPackage.split("\\."));
additionalProperties.put("modelNamespace", modelPackage.replaceAll("\\.", "::")); additionalProperties.put("modelNamespace", modelPackage.replaceAll("\\.", "::"));
additionalProperties.put("modelHeaderGuardPrefix", modelPackage.replaceAll("\\.", "_").toUpperCase()); additionalProperties.put("modelHeaderGuardPrefix", modelPackage.replaceAll("\\.", "_").toUpperCase(Locale.ROOT));
additionalProperties.put("apiNamespaceDeclarations", apiPackage.split("\\.")); additionalProperties.put("apiNamespaceDeclarations", apiPackage.split("\\."));
additionalProperties.put("apiNamespace", apiPackage.replaceAll("\\.", "::")); additionalProperties.put("apiNamespace", apiPackage.replaceAll("\\.", "::"));
additionalProperties.put("apiHeaderGuardPrefix", apiPackage.replaceAll("\\.", "_").toUpperCase()); additionalProperties.put("apiHeaderGuardPrefix", apiPackage.replaceAll("\\.", "_").toUpperCase(Locale.ROOT));
additionalProperties.put("declspec", declspec); additionalProperties.put("declspec", declspec);
additionalProperties.put("defaultInclude", defaultInclude); additionalProperties.put("defaultInclude", defaultInclude);
} }
@ -308,7 +307,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<utility::string_t, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<utility::string_t, " + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isStringSchema(p) } else if (ModelUtils.isStringSchema(p)
|| ModelUtils.isDateSchema(p) || ModelUtils.isDateTimeSchema(p) || ModelUtils.isDateSchema(p) || ModelUtils.isDateTimeSchema(p)
@ -339,7 +338,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
} }
return "0"; return "0";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties()); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<utility::string_t, " + inner + ">()"; return "std::map<utility::string_t, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;

View File

@ -270,7 +270,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isByteArraySchema(p)) { } else if (ModelUtils.isByteArraySchema(p)) {
return "std::string"; return "std::string";
@ -307,7 +307,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
} else if (ModelUtils.isByteArraySchema(p)) { } else if (ModelUtils.isByteArraySchema(p)) {
return "\"\""; return "\"\"";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties()); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()"; return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; ArraySchema ap = (ArraySchema) p;

View File

@ -307,7 +307,7 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<String, " + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<String, " + getTypeDeclaration(inner) + ">";
} }

View File

@ -17,13 +17,16 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import java.io.File; import org.openapitools.codegen.CodegenConstants;
import java.util.UUID; import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.openapitools.codegen.*; import java.io.File;
import java.util.Locale;
import java.util.UUID;
public class EiffelClientCodegen extends AbstractEiffelCodegen { public class EiffelClientCodegen extends AbstractEiffelCodegen {
private static final Logger LOGGER = LoggerFactory.getLogger(EiffelClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(EiffelClientCodegen.class);
@ -168,7 +171,7 @@ public class EiffelClientCodegen extends AbstractEiffelCodegen {
@Override @Override
public String toEnumName(CodegenProperty property) { public String toEnumName(CodegenProperty property) {
return sanitizeName(property.name).toUpperCase() + "_ENUM"; return sanitizeName(property.name).toUpperCase(Locale.ROOT) + "_ENUM";
} }
@Override @Override
@ -179,7 +182,7 @@ public class EiffelClientCodegen extends AbstractEiffelCodegen {
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(value) != null) { if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase(); return getSymbolName(value).toUpperCase(Locale.ROOT);
} }
// number // number
@ -193,7 +196,7 @@ public class EiffelClientCodegen extends AbstractEiffelCodegen {
} }
// string // string
String var = value.replaceAll("\\W+", "_").toLowerCase(); String var = value.replaceAll("\\W+", "_").toLowerCase(Locale.ROOT);
if (var.matches("\\d.*")) { if (var.matches("\\d.*")) {
return "val_" + var; return "val_" + var;
} else if (var.startsWith("_")) { } else if (var.startsWith("_")) {

View File

@ -447,7 +447,7 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "%{optional(String.t) => " + getTypeDeclaration(inner) + "}"; return "%{optional(String.t) => " + getTypeDeclaration(inner) + "}";
} else if (ModelUtils.isPasswordSchema(p)) { } else if (ModelUtils.isPasswordSchema(p)) {
return "String.t"; return "String.t";

View File

@ -17,15 +17,21 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.NumberSchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenResponse;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
import org.openapitools.codegen.languages.features.JbossFeature;
import org.openapitools.codegen.languages.features.SwaggerFeatures;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.parameters.*;
import io.swagger.v3.oas.models.responses.*;
import java.io.File; import java.io.File;
import java.text.Collator; import java.text.Collator;
@ -36,6 +42,7 @@ import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
@ -259,7 +266,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
Collections.sort(parent.children, new Comparator<CodegenModel>() { Collections.sort(parent.children, new Comparator<CodegenModel>() {
@Override @Override
public int compare(CodegenModel cm1, CodegenModel cm2) { public int compare(CodegenModel cm1, CodegenModel cm2) {
return Collator.getInstance().compare(cm1.classname, cm2.classname); return Collator.getInstance(Locale.ROOT).compare(cm1.classname, cm2.classname);
} }
}); });
} }
@ -486,7 +493,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);
@ -506,8 +513,8 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
} }
@Override @Override
public CodegenResponse fromResponse(String responseCode, ApiResponse resp) { public CodegenResponse fromResponse(OpenAPI openAPI, String responseCode, ApiResponse resp) {
final CodegenResponse response = super.fromResponse(responseCode, resp); final CodegenResponse response = super.fromResponse(openAPI, responseCode, resp);
if (response.dataType != null) { if (response.dataType != null) {
addEncoderAndDecoder(response.vendorExtensions, response.dataType, response.isMapContainer, response.primitiveType); addEncoderAndDecoder(response.vendorExtensions, response.dataType, response.isMapContainer, response.primitiveType);
} }

View File

@ -21,6 +21,7 @@ import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template; import com.samskivert.mustache.Template;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.openapitools.codegen.mustache.JoinWithCommaLambda;
import io.swagger.v3.oas.models.media.*; import io.swagger.v3.oas.models.media.*;
import java.io.File; import java.io.File;
@ -133,6 +134,8 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig
public void processOpts() { public void processOpts() {
super.processOpts(); super.processOpts();
additionalProperties.put("joinWithComma", new JoinWithCommaLambda());
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
} else { } else {
@ -287,7 +290,7 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig
Pattern pattern = Pattern.compile("\\{([^\\}]+)\\}"); Pattern pattern = Pattern.compile("\\{([^\\}]+)\\}");
for (CodegenOperation o : os) { for (CodegenOperation o : os) {
// force http method to lower case // force http method to lower case
o.httpMethod = o.httpMethod.toLowerCase(); o.httpMethod = o.httpMethod.toLowerCase(Locale.ROOT);
if (o.isListContainer) { if (o.isListContainer) {
o.returnType = "[" + o.returnBaseType + "]"; o.returnType = "[" + o.returnBaseType + "]";

View File

@ -239,7 +239,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
} }
@ -341,7 +341,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
} }
private void generateScalaPath(CodegenOperation op) { private void generateScalaPath(CodegenOperation op) {
op.httpMethod = op.httpMethod.toLowerCase(); op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
String path = op.path; String path = op.path;
@ -366,7 +366,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
final CodegenParameter cp = op.pathParams.get(pathParamIndex); final CodegenParameter cp = op.pathParams.get(pathParamIndex);
// TODO: Handle non-primitives // TODO: Handle non-primitives
scalaPath = colConcat(scalaPath, cp.dataType.toLowerCase()); scalaPath = colConcat(scalaPath, cp.dataType.toLowerCase(Locale.ROOT));
pathParamIndex++; pathParamIndex++;
} else { } else {
@ -425,7 +425,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
p.vendorExtensions.put("x-codegen-normalized-path-type", toPathParameter(p, "param", true)); p.vendorExtensions.put("x-codegen-normalized-path-type", toPathParameter(p, "param", true));
} else { } else {
// If parameter is primitive and required, we can rely on data types like "string" or "long" // If parameter is primitive and required, we can rely on data types like "string" or "long"
p.vendorExtensions.put("x-codegen-normalized-path-type", p.dataType.toLowerCase()); p.vendorExtensions.put("x-codegen-normalized-path-type", p.dataType.toLowerCase(Locale.ROOT));
} }
p.vendorExtensions.put("x-codegen-normalized-input-type", toInputParameter(p)); p.vendorExtensions.put("x-codegen-normalized-input-type", toInputParameter(p));
} else { } else {

View File

@ -17,25 +17,17 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.*;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.mustache.*;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.parameters.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig { public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(FlashClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(FlashClientCodegen.class);
@ -267,7 +259,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig
// if it's all uppper case, convert to lower case // if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) { if (name.matches("^[A-Z_]*$")) {
name = name.toLowerCase(); name = name.toLowerCase(Locale.ROOT);
} }
// underscore the variable name // underscore the variable name

View File

@ -465,7 +465,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
} else { } else {
baseTitle = baseTitle.trim(); baseTitle = baseTitle.trim();
// Drop any API suffix // Drop any API suffix
if (baseTitle.toUpperCase().endsWith("API")) { if (baseTitle.toUpperCase(Locale.ROOT).endsWith("API")) {
baseTitle = baseTitle.substring(0, baseTitle.length() - 3); baseTitle = baseTitle.substring(0, baseTitle.length() - 3);
} }
} }
@ -473,7 +473,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (!additionalProperties.containsKey(PROP_CABAL_PACKAGE)) { if (!additionalProperties.containsKey(PROP_CABAL_PACKAGE)) {
List<String> words = new ArrayList<>(); List<String> words = new ArrayList<>();
for (String word : baseTitle.split(" ")) { for (String word : baseTitle.split(" ")) {
words.add(word.toLowerCase()); words.add(word.toLowerCase(Locale.ROOT));
} }
setCabalPackage(StringUtils.join(words, "-")); setCabalPackage(StringUtils.join(words, "-"));
} }
@ -548,7 +548,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "(Map.Map String " + getTypeDeclaration(inner) + ")"; return "(Map.Map String " + getTypeDeclaration(inner) + ")";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);
@ -570,7 +570,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
Schema additionalProperties2 = (Schema) p.getAdditionalProperties(); Schema additionalProperties2 = ModelUtils.getAdditionalProperties(p);
String type = additionalProperties2.getType(); String type = additionalProperties2.getType();
if (null == type) { if (null == type) {
LOGGER.error("No Type defined for Additional Schema " + additionalProperties2 + "\n" // LOGGER.error("No Type defined for Additional Schema " + additionalProperties2 + "\n" //
@ -615,7 +615,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
LOGGER.warn("generated unique operationId `" + uniqueName + "`"); LOGGER.warn("generated unique operationId `" + uniqueName + "`");
} }
op.operationId = uniqueName; op.operationId = uniqueName;
op.operationIdLowerCase = uniqueName.toLowerCase(); op.operationIdLowerCase = uniqueName.toLowerCase(Locale.ROOT);
op.operationIdCamelCase = DefaultCodegen.camelize(uniqueName); op.operationIdCamelCase = DefaultCodegen.camelize(uniqueName);
op.operationIdSnakeCase = DefaultCodegen.underscore(uniqueName); op.operationIdSnakeCase = DefaultCodegen.underscore(uniqueName);
opList.add(op); opList.add(op);
@ -628,7 +628,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
op.vendorExtensions.put(X_OPERATION_TYPE, operationType); op.vendorExtensions.put(X_OPERATION_TYPE, operationType);
typeNames.add(operationType); typeNames.add(operationType);
op.vendorExtensions.put(X_HADDOCK_PATH, String.format("%s %s", op.httpMethod, op.path.replace("/", "\\/"))); op.vendorExtensions.put(X_HADDOCK_PATH, String.format(Locale.ROOT, "%s %s", op.httpMethod, op.path.replace("/", "\\/")));
op.vendorExtensions.put(X_HAS_BODY_OR_FORM_PARAM, op.getHasBodyParam() || op.getHasFormParams()); op.vendorExtensions.put(X_HAS_BODY_OR_FORM_PARAM, op.getHasBodyParam() || op.getHasFormParams());
for (CodegenParameter param : op.allParams) { for (CodegenParameter param : op.allParams) {
@ -1003,9 +1003,9 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (word.length() == 0) { if (word.length() == 0) {
return word; return word;
} else if (word.length() == 1) { } else if (word.length() == 1) {
return word.substring(0, 1).toUpperCase(); return word.substring(0, 1).toUpperCase(Locale.ROOT);
} else { } else {
return word.substring(0, 1).toUpperCase() + word.substring(1); return word.substring(0, 1).toUpperCase(Locale.ROOT) + word.substring(1);
} }
} }
@ -1013,9 +1013,9 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (word.length() == 0) { if (word.length() == 0) {
return word; return word;
} else if (word.length() == 1) { } else if (word.length() == 1) {
return word.substring(0, 1).toLowerCase(); return word.substring(0, 1).toLowerCase(Locale.ROOT);
} else { } else {
return word.substring(0, 1).toLowerCase() + word.substring(1); return word.substring(0, 1).toLowerCase(Locale.ROOT) + word.substring(1);
} }
} }
@ -1303,7 +1303,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
} }
// number // number
if (num.contains(datatype.toLowerCase())) { if (num.contains(datatype.toLowerCase(Locale.ROOT))) {
String varName = "Num" + value; String varName = "Num" + value;
varName = varName.replaceAll("-", "Minus_"); varName = varName.replaceAll("-", "Minus_");
varName = varName.replaceAll("\\+", "Plus_"); varName = varName.replaceAll("\\+", "Plus_");
@ -1317,7 +1317,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
@Override @Override
public String toEnumValue(String value, String datatype) { public String toEnumValue(String value, String datatype) {
List<String> num = new ArrayList<>(Arrays.asList("integer", "int", "double", "long", "float")); List<String> num = new ArrayList<>(Arrays.asList("integer", "int", "double", "long", "float"));
if (num.contains(datatype.toLowerCase())) { if (num.contains(datatype.toLowerCase(Locale.ROOT))) {
return value; return value;
} else { } else {
return "\"" + escapeText(value) + "\""; return "\"" + escapeText(value) + "\"";

View File

@ -17,6 +17,10 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
@ -29,15 +33,16 @@ import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.media.*;
import java.util.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class HaskellServantCodegen extends DefaultCodegen implements CodegenConfig { public class HaskellServantCodegen extends DefaultCodegen implements CodegenConfig {
@ -204,9 +209,9 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
if (word.length() == 0) { if (word.length() == 0) {
return word; return word;
} else if (word.length() == 1) { } else if (word.length() == 1) {
return word.substring(0, 1).toUpperCase(); return word.substring(0, 1).toUpperCase(Locale.ROOT);
} else { } else {
return word.substring(0, 1).toUpperCase() + word.substring(1); return word.substring(0, 1).toUpperCase(Locale.ROOT) + word.substring(1);
} }
} }
@ -214,9 +219,9 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
if (word.length() == 0) { if (word.length() == 0) {
return word; return word;
} else if (word.length() == 1) { } else if (word.length() == 1) {
return word.substring(0, 1).toLowerCase(); return word.substring(0, 1).toLowerCase(Locale.ROOT);
} else { } else {
return word.substring(0, 1).toLowerCase() + word.substring(1); return word.substring(0, 1).toLowerCase(Locale.ROOT) + word.substring(1);
} }
} }
@ -230,7 +235,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
title = "OpenAPI"; title = "OpenAPI";
} else { } else {
title = title.trim(); title = title.trim();
if (title.toUpperCase().endsWith("API")) { if (title.toUpperCase(Locale.ROOT).endsWith("API")) {
title = title.substring(0, title.length() - 3); title = title.substring(0, title.length() - 3);
} }
} }
@ -240,7 +245,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
// The package name is made by appending the lowercased words of the title interspersed with dashes // The package name is made by appending the lowercased words of the title interspersed with dashes
List<String> wordsLower = new ArrayList<String>(); List<String> wordsLower = new ArrayList<String>();
for (String word : words) { for (String word : words) {
wordsLower.add(word.toLowerCase()); wordsLower.add(word.toLowerCase(Locale.ROOT));
} }
String cabalName = joinStrings("-", wordsLower); String cabalName = joinStrings("-", wordsLower);
@ -293,7 +298,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "Map.Map String " + getTypeDeclaration(inner); return "Map.Map String " + getTypeDeclaration(inner);
} }
return fixModelChars(super.getTypeDeclaration(p)); return fixModelChars(super.getTypeDeclaration(p));
@ -328,7 +333,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
Schema additionalProperties2 = (Schema) p.getAdditionalProperties(); Schema additionalProperties2 = ModelUtils.getAdditionalProperties(p);
String type = additionalProperties2.getType(); String type = additionalProperties2.getType();
if (null == type) { if (null == type) {
LOGGER.error("No Type defined for Additional Property " + additionalProperties2 + "\n" // LOGGER.error("No Type defined for Additional Property " + additionalProperties2 + "\n" //
@ -484,7 +489,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
if (returnType.indexOf(" ") >= 0) { if (returnType.indexOf(" ") >= 0) {
returnType = "(" + returnType + ")"; returnType = "(" + returnType + ")";
} }
path.add("Verb '" + op.httpMethod.toUpperCase() + " 200 '[JSON] " + returnType); path.add("Verb '" + op.httpMethod.toUpperCase(Locale.ROOT) + " 200 '[JSON] " + returnType);
type.add("m " + returnType); type.add("m " + returnType);
op.vendorExtensions.put("x-routeType", joinStrings(" :> ", path)); op.vendorExtensions.put("x-routeType", joinStrings(" :> ", path));

View File

@ -174,7 +174,7 @@ public class JMeterClientCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);

View File

@ -18,7 +18,6 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
@ -32,6 +31,7 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class JavaInflectorServerCodegen extends AbstractJavaCodegen { public class JavaInflectorServerCodegen extends AbstractJavaCodegen {
@ -198,7 +198,7 @@ public class JavaInflectorServerCodegen extends AbstractJavaCodegen {
@Override @Override
protected String getOrGenerateOperationId(Operation operation, String path, String httpMethod) { protected String getOrGenerateOperationId(Operation operation, String path, String httpMethod) {
return super.getOrGenerateOperationId(operation, path, httpMethod.toUpperCase()); return super.getOrGenerateOperationId(operation, path, httpMethod.toUpperCase(Locale.ROOT));
} }
public String apiFilename(String templateName, String tag) { public String apiFilename(String templateName, String tag) {

View File

@ -17,13 +17,12 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.*;
import java.util.*;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import java.util.*;
public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen { public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
@ -159,7 +158,7 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
@Override @Override
public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) { public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) {
if (useTags) { if (useTags) {
String basePath = tag.toLowerCase(); String basePath = tag.toLowerCase(Locale.ROOT);
if (basePath.startsWith("/")) { if (basePath.startsWith("/")) {
basePath = basePath.substring(1); basePath = basePath.substring(1);
} }

View File

@ -21,7 +21,6 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.tags.Tag; import io.swagger.v3.oas.models.tags.Tag;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
@ -39,6 +38,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
/** /**
@ -541,7 +541,7 @@ public class JavaPKMSTServerCodegen extends AbstractJavaCodegen {
// Drop any API suffix // Drop any API suffix
if (title != null) { if (title != null) {
title = title.trim().replace(" ", "-"); title = title.trim().replace(" ", "-");
if (title.toUpperCase().endsWith("API")) { if (title.toUpperCase(Locale.ROOT).endsWith("API")) {
title = title.substring(0, title.length() - 3); title = title.substring(0, title.length() - 3);
} }

View File

@ -30,6 +30,7 @@ import org.openapitools.codegen.languages.features.BeanValidationFeatures;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -191,7 +192,7 @@ public class JavaPlayFrameworkCodegen extends AbstractJavaCodegen implements Bea
if (this.useSwaggerUI) { if (this.useSwaggerUI) {
//App/Controllers //App/Controllers
supportingFiles.add(new SupportingFile("openapi.mustache", "public", "openapi.json")); supportingFiles.add(new SupportingFile("openapi.mustache", "public", "openapi.json"));
supportingFiles.add(new SupportingFile("apiDocController.mustache", String.format("app/%s", apiPackage.replace(".", File.separator)), "ApiDocController.java")); supportingFiles.add(new SupportingFile("apiDocController.mustache", String.format(Locale.ROOT, "app/%s", apiPackage.replace(".", File.separator)), "ApiDocController.java"));
} }
//We remove the default api.mustache that is used //We remove the default api.mustache that is used

View File

@ -22,7 +22,6 @@ import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod; import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenOperation;
@ -34,6 +33,7 @@ import org.openapitools.codegen.utils.URLPathUtils;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -175,7 +175,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen {
if (operations != null) { if (operations != null) {
List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation"); List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation operation : ops) { for (CodegenOperation operation : ops) {
operation.httpMethod = operation.httpMethod.toLowerCase(); operation.httpMethod = operation.httpMethod.toLowerCase(Locale.ROOT);
if ("Void".equalsIgnoreCase(operation.returnType)) { if ("Void".equalsIgnoreCase(operation.returnType)) {
operation.returnType = null; operation.returnType = null;
@ -251,7 +251,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen {
serviceIdTemp = computeServiceId(pathname, entry); serviceIdTemp = computeServiceId(pathname, entry);
entry.getValue().addExtension("x-serviceid", serviceIdTemp); entry.getValue().addExtension("x-serviceid", serviceIdTemp);
entry.getValue().addExtension("x-serviceid-varname", entry.getValue().addExtension("x-serviceid-varname",
serviceIdTemp.toUpperCase() + "_SERVICE_ID"); serviceIdTemp.toUpperCase(Locale.ROOT) + "_SERVICE_ID");
} }
} }
} }
@ -284,7 +284,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen {
pattern = Pattern.compile("(_)(.)"); pattern = Pattern.compile("(_)(.)");
matcher = pattern.matcher(word); matcher = pattern.matcher(word);
while (matcher.find()) { while (matcher.find()) {
word = matcher.replaceFirst(matcher.group(2).toUpperCase()); word = matcher.replaceFirst(matcher.group(2).toUpperCase(Locale.ROOT));
matcher = pattern.matcher(word); matcher = pattern.matcher(word);
} }
return word; return word;

View File

@ -18,7 +18,12 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
@ -27,18 +32,9 @@ import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty; import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.parameters.*;
import io.swagger.v3.oas.models.info.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -48,6 +44,7 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class JavascriptClientCodegen extends DefaultCodegen implements CodegenConfig { public class JavascriptClientCodegen extends DefaultCodegen implements CodegenConfig {
@ -601,7 +598,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "{String: " + getTypeDeclaration(inner) + "}"; return "{String: " + getTypeDeclaration(inner) + "}";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);
@ -863,9 +860,9 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
codegenModel.getVendorExtensions().put("x-itemType", getSchemaType(am.getItems())); codegenModel.getVendorExtensions().put("x-itemType", getSchemaType(am.getItems()));
} }
} else if (ModelUtils.isMapSchema(model)) { } else if (ModelUtils.isMapSchema(model)) {
if (model.getAdditionalProperties() != null) { if (ModelUtils.getAdditionalProperties(model) != null) {
codegenModel.getVendorExtensions().put("x-isMap", true); codegenModel.getVendorExtensions().put("x-isMap", true);
codegenModel.getVendorExtensions().put("x-itemType", getSchemaType((Schema) model.getAdditionalProperties())); codegenModel.getVendorExtensions().put("x-itemType", getSchemaType(ModelUtils.getAdditionalProperties(model)));
} else { } else {
String type = model.getType(); String type = model.getType();
if (isPrimitiveType(type)){ if (isPrimitiveType(type)){
@ -1132,7 +1129,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(value) != null) { if (getSymbolName(value) != null) {
return (getSymbolName(value)).toUpperCase(); return (getSymbolName(value)).toUpperCase(Locale.ROOT);
} }
return value; return value;

View File

@ -236,7 +236,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "<!" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<!" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return "Object<!string, "+ getTypeDeclaration(inner) + ">"; return "Object<!string, "+ getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isFileSchema(p)) { } else if (ModelUtils.isFileSchema(p)) {
return "Object"; return "Object";

View File

@ -30,7 +30,7 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCodegen { public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCodegen {
private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm"); private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm", Locale.ROOT);
public static final String NPM_NAME = "npmName"; public static final String NPM_NAME = "npmName";
public static final String NPM_VERSION = "npmVersion"; public static final String NPM_VERSION = "npmVersion";
@ -119,7 +119,7 @@ public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCo
@Override @Override
protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) { protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) {
codegenModel.additionalPropertiesType = getTypeDeclaration((Schema) schema.getAdditionalProperties()); codegenModel.additionalPropertiesType = getTypeDeclaration(ModelUtils.getAdditionalProperties(schema));
addImport(codegenModel, codegenModel.additionalPropertiesType); addImport(codegenModel, codegenModel.additionalPropertiesType);
} }
@ -141,7 +141,7 @@ public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCo
inner = ((ArraySchema) p).getItems(); inner = ((ArraySchema) p).getItems();
return this.getSchemaType(p) + "<" + this.getTypeDeclaration(inner) + ">"; return this.getSchemaType(p) + "<" + this.getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
inner = (Schema) p.getAdditionalProperties(); inner = ModelUtils.getAdditionalProperties(p);
return "{ [key: string]: " + this.getTypeDeclaration(inner) + "; }"; return "{ [key: string]: " + this.getTypeDeclaration(inner) + "; }";
} else if (ModelUtils.isFileSchema(p)) { } else if (ModelUtils.isFileSchema(p)) {
return "any"; return "any";

View File

@ -17,21 +17,32 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.media.ArraySchema;
import org.openapitools.codegen.utils.ModelUtils; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import java.io.File;
import java.util.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig { public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(LuaClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(LuaClientCodegen.class);
@ -337,7 +348,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} }
@ -403,7 +414,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
// find the datatype of the parameter // find the datatype of the parameter
//final CodegenParameter cp = op.pathParams.get(pathParamIndex); //final CodegenParameter cp = op.pathParams.get(pathParamIndex);
// TODO: Handle non-primitives // TODO: Handle non-primitives
//luaPath = luaPath + cp.dataType.toLowerCase(); //luaPath = luaPath + cp.dataType.toLowerCase(Locale.ROOT);
luaPath = luaPath + "/%s"; luaPath = luaPath + "/%s";
pathParamIndex++; pathParamIndex++;
} else if (items[i].length() != 0) { } else if (items[i].length() != 0) {
@ -514,11 +525,11 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(name) != null) { if (getSymbolName(name) != null) {
return getSymbolName(name).toUpperCase(); return getSymbolName(name).toUpperCase(Locale.ROOT);
} }
// string // string
String enumName = sanitizeName(underscore(name).toUpperCase()); String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", ""); enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", ""); enumName = enumName.replaceFirst("_$", "");
@ -531,7 +542,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String toEnumName(CodegenProperty property) { public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase(); String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum // remove [] for array or map of enum
enumName = enumName.replace("[]", ""); enumName = enumName.replace("[]", "");

View File

@ -20,25 +20,37 @@ package org.openapitools.codegen.languages;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.Operation;
import org.openapitools.codegen.utils.*; import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.*; import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.info.*;
import io.swagger.v3.oas.models.PathItem.*;
import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.Paths;
import io.swagger.v3.oas.models.info.Info;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenResponse;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig { public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(NodeJSServerCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(NodeJSServerCodegen.class);
@ -232,7 +244,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation"); List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation operation : operations) { for (CodegenOperation operation : operations) {
operation.httpMethod = operation.httpMethod.toLowerCase(); operation.httpMethod = operation.httpMethod.toLowerCase(Locale.ROOT);
List<CodegenParameter> params = operation.allParams; List<CodegenParameter> params = operation.allParams;
if (params != null && params.size() == 0) { if (params != null && params.size() == 0) {
@ -368,7 +380,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig
.replaceAll("^[-]*", "") .replaceAll("^[-]*", "")
.replaceAll("[-]*$", "") .replaceAll("[-]*$", "")
.replaceAll("[-]{2,}", "-") .replaceAll("[-]{2,}", "-")
.toLowerCase(); .toLowerCase(Locale.ROOT);
this.additionalProperties.put("projectName", projectName); this.additionalProperties.put("projectName", projectName);
} }
} }

View File

@ -17,6 +17,9 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
@ -28,10 +31,6 @@ import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -40,11 +39,10 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.StringUtils;
public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(ObjcClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(ObjcClientCodegen.class);
@ -341,8 +339,8 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
} }
// TODO avoid using toLowerCase as typeMapping should be case-sensitive // TODO avoid using toLowerCase as typeMapping should be case-sensitive
if (typeMapping.containsKey(openAPIType.toLowerCase())) { if (typeMapping.containsKey(openAPIType.toLowerCase(Locale.ROOT))) {
type = typeMapping.get(openAPIType.toLowerCase()); type = typeMapping.get(openAPIType.toLowerCase(Locale.ROOT));
if (languageSpecificPrimitives.contains(type) && !foundationClasses.contains(type)) { if (languageSpecificPrimitives.contains(type) && !foundationClasses.contains(type)) {
return toModelNameWithoutReservedWordCheck(type); return toModelNameWithoutReservedWordCheck(type);
} }
@ -377,7 +375,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
return getSchemaType(p) + "<" + innerTypeDeclaration + ">*"; return getSchemaType(p) + "<" + innerTypeDeclaration + ">*";
} }
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
String innerTypeDeclaration = getTypeDeclaration(inner); String innerTypeDeclaration = getTypeDeclaration(inner);
@ -417,7 +415,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public boolean isDataTypeBinary(String dataType) { public boolean isDataTypeBinary(String dataType) {
return dataType.toLowerCase().startsWith("nsdata"); return dataType.toLowerCase(Locale.ROOT).startsWith("nsdata");
} }
@Override @Override

View File

@ -220,7 +220,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);

View File

@ -204,7 +204,7 @@ public class PhpLaravelServerCodegen extends AbstractPhpCodegen {
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation"); List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation op : operations) { for (CodegenOperation op : operations) {
op.httpMethod = op.httpMethod.toLowerCase(); op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
// check to see if the path contains ".", which is not supported by PHP laravel // check to see if the path contains ".", which is not supported by PHP laravel
// ref: https://github.com/swagger-api/swagger-codegen/issues/6897 // ref: https://github.com/swagger-api/swagger-codegen/issues/6897
if (op.path != null && op.path.contains(".")) { if (op.path != null && op.path.contains(".")) {

View File

@ -17,10 +17,12 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.openapitools.codegen.*; import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import java.util.*;
import java.io.File; import java.io.File;
import java.util.*;
public class PhpLumenServerCodegen extends AbstractPhpCodegen { public class PhpLumenServerCodegen extends AbstractPhpCodegen {
@SuppressWarnings("hiding") @SuppressWarnings("hiding")
@ -115,7 +117,7 @@ public class PhpLumenServerCodegen extends AbstractPhpCodegen {
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation"); List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation op : operations) { for (CodegenOperation op : operations) {
op.httpMethod = op.httpMethod.toLowerCase(); op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
// check to see if the path contains ".", which is not supported by Lumen // check to see if the path contains ".", which is not supported by Lumen
if (op.path != null && op.path.contains(".")) { if (op.path != null && op.path.contains(".")) {
throw new IllegalArgumentException("'.' (dot) is not supported by PHP Lumen."); throw new IllegalArgumentException("'.' (dot) is not supported by PHP Lumen.");

View File

@ -116,6 +116,9 @@ public class PhpSilexServerCodegen extends DefaultCodegen implements CodegenConf
supportingFiles.add(new SupportingFile("composer.json", "", "composer.json")); supportingFiles.add(new SupportingFile("composer.json", "", "composer.json"));
supportingFiles.add(new SupportingFile("index.mustache", "", "index.php")); supportingFiles.add(new SupportingFile("index.mustache", "", "index.php"));
supportingFiles.add(new SupportingFile(".htaccess", "", ".htaccess")); supportingFiles.add(new SupportingFile(".htaccess", "", ".htaccess"));
// remove this line when this class extends AbstractPhpCodegen
supportingFiles.add(new SupportingFile(".gitignore", "", ".gitignore"));
} }
@Override @Override
@ -160,7 +163,7 @@ public class PhpSilexServerCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);

View File

@ -113,7 +113,6 @@ public class PhpSlimServerCodegen extends AbstractPhpCodegen {
supportingFiles.add(new SupportingFile("composer.mustache", "", "composer.json")); supportingFiles.add(new SupportingFile("composer.mustache", "", "composer.json"));
supportingFiles.add(new SupportingFile("index.mustache", "", "index.php")); supportingFiles.add(new SupportingFile("index.mustache", "", "index.php"));
supportingFiles.add(new SupportingFile(".htaccess", "", ".htaccess")); supportingFiles.add(new SupportingFile(".htaccess", "", ".htaccess"));
supportingFiles.add(new SupportingFile(".gitignore", "", ".gitignore"));
supportingFiles.add(new SupportingFile("AbstractApiController.mustache", toSrcPath(invokerPackage, srcBasePath), "AbstractApiController.php")); supportingFiles.add(new SupportingFile("AbstractApiController.mustache", toSrcPath(invokerPackage, srcBasePath), "AbstractApiController.php"));
supportingFiles.add(new SupportingFile("SlimRouter.mustache", toSrcPath(invokerPackage, srcBasePath), "SlimRouter.php")); supportingFiles.add(new SupportingFile("SlimRouter.mustache", toSrcPath(invokerPackage, srcBasePath), "SlimRouter.php"));
supportingFiles.add(new SupportingFile("phpunit.xml.mustache", "", "phpunit.xml.dist")); supportingFiles.add(new SupportingFile("phpunit.xml.mustache", "", "phpunit.xml.dist"));

View File

@ -17,17 +17,11 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.parameters.*;
import io.swagger.v3.core.util.Yaml;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -194,7 +188,7 @@ public class PhpSymfonyServerCodegen extends AbstractPhpCodegen implements Codeg
this.bundleName = bundleName; this.bundleName = bundleName;
this.bundleClassName = bundleName + "Bundle"; this.bundleClassName = bundleName + "Bundle";
this.bundleExtensionName = bundleName + "Extension"; this.bundleExtensionName = bundleName + "Extension";
this.bundleAlias = snakeCase(bundleName).replaceAll("([A-Z]+)", "\\_$1").toLowerCase(); this.bundleAlias = snakeCase(bundleName).replaceAll("([A-Z]+)", "\\_$1").toLowerCase(Locale.ROOT);
} }
public void setPhpLegacySupport(Boolean support) { public void setPhpLegacySupport(Boolean support) {
@ -497,7 +491,7 @@ public class PhpSymfonyServerCodegen extends AbstractPhpCodegen implements Codeg
} }
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} }

View File

@ -17,23 +17,18 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.PathItem;
import org.openapitools.codegen.*;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.media.*; import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.core.util.Yaml; import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.parameters.*; import io.swagger.v3.oas.models.parameters.QueryParameter;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PhpZendExpressivePathHandlerServerCodegen extends AbstractPhpCodegen { public class PhpZendExpressivePathHandlerServerCodegen extends AbstractPhpCodegen {
@ -120,7 +115,7 @@ public class PhpZendExpressivePathHandlerServerCodegen extends AbstractPhpCodege
} }
} }
if (counter == 0) { if (counter == 0) {
co.operationIdLowerCase = co.operationId.toLowerCase(); co.operationIdLowerCase = co.operationId.toLowerCase(Locale.ROOT);
opList.add(co); opList.add(co);
co.baseName = tag; co.baseName = tag;
} }

View File

@ -17,14 +17,18 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import org.openapitools.codegen.utils.ModelUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -33,6 +37,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import static java.util.UUID.randomUUID; import static java.util.UUID.randomUUID;
@ -40,7 +45,7 @@ import static java.util.UUID.randomUUID;
public class PowerShellClientCodegen extends DefaultCodegen implements CodegenConfig { public class PowerShellClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(PowerShellClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(PowerShellClientCodegen.class);
private String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}"; private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
protected String sourceFolder = "src"; protected String sourceFolder = "src";
protected String packageName = "Org.OpenAPITools"; protected String packageName = "Org.OpenAPITools";
@ -383,7 +388,7 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getTypeDeclaration(inner) + "[]"; return getTypeDeclaration(inner) + "[]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
// TODO not sure if the following map/hash declaration is correct // TODO not sure if the following map/hash declaration is correct
return "{String, " + getTypeDeclaration(inner) + "}"; return "{String, " + getTypeDeclaration(inner) + "}";
} else if (!languageSpecificPrimitives.contains(getSchemaType(p))) { } else if (!languageSpecificPrimitives.contains(getSchemaType(p))) {

View File

@ -17,6 +17,9 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenConstants;
@ -27,11 +30,6 @@ import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -40,13 +38,10 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig { public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(PythonClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(PythonClientCodegen.class);
@ -404,7 +399,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "(str, " + getTypeDeclaration(inner) + ")"; return getSchemaType(p) + "(str, " + getTypeDeclaration(inner) + ")";
} }
@ -436,7 +431,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig
// if it's all uppper case, convert to lower case // if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) { if (name.matches("^[A-Z_]*$")) {
name = name.toLowerCase(); name = name.toLowerCase(Locale.ROOT);
} }
// underscore the variable name // underscore the variable name

View File

@ -20,21 +20,21 @@ package org.openapitools.codegen.languages;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.*; import io.swagger.v3.oas.models.Operation;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod; import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.*; import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.*; import java.util.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PythonFlaskConnexionServerCodegen extends DefaultCodegen implements CodegenConfig { public class PythonFlaskConnexionServerCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(PythonFlaskConnexionServerCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(PythonFlaskConnexionServerCodegen.class);
@ -289,7 +289,7 @@ public class PythonFlaskConnexionServerCodegen extends DefaultCodegen implements
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[str, " + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[str, " + getTypeDeclaration(inner) + "]";
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);
@ -400,7 +400,7 @@ public class PythonFlaskConnexionServerCodegen extends DefaultCodegen implements
// if it's all uppper case, convert to lower case // if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) { if (name.matches("^[A-Z_]*$")) {
name = name.toLowerCase(); name = name.toLowerCase(Locale.ROOT);
} }
// underscore the variable name // underscore the variable name

View File

@ -286,7 +286,7 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems(); Schema inner = ap.getItems();
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties(); Schema inner = ModelUtils.getAdditionalProperties(p);
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} }
@ -428,11 +428,11 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig {
// for symbol, e.g. $, # // for symbol, e.g. $, #
if (getSymbolName(name) != null) { if (getSymbolName(name) != null) {
return getSymbolName(name).toUpperCase(); return getSymbolName(name).toUpperCase(Locale.ROOT);
} }
// string // string
String enumName = sanitizeName(underscore(name).toUpperCase()); String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", ""); enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", ""); enumName = enumName.replaceFirst("_$", "");
@ -445,7 +445,7 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String toEnumName(CodegenProperty property) { public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase(); String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum // remove [] for array or map of enum
enumName = enumName.replace("[]", ""); enumName = enumName.replace("[]", "");

Some files were not shown because too many files have changed in this diff Show More