From 5da0b96f17ae4bcbfd90f6a2f70e2e424f8247c5 Mon Sep 17 00:00:00 2001 From: Steffen Furholm Date: Sat, 31 Oct 2015 01:14:17 +0100 Subject: [PATCH 01/30] Added support for sortParamsByRequiredFlag config option to C# and Python --- .../io/swagger/codegen/DefaultGenerator.java | 7 ++++++ .../languages/CSharpClientCodegen.java | 2 +- .../languages/PythonClientCodegen.java | 1 + .../src/main/resources/python/api.mustache | 22 ++++++++++++------- .../csharp/CSharpClientOptionsTest.java | 1 + .../python/PythonClientOptionsTest.java | 1 + 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 9a2a47853ea..e6e1499a2ee 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -262,6 +262,13 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { operation.put("classVarName", config.toApiVarName(tag)); operation.put("importPath", config.toApiImport(tag)); + // Pass sortParamsByRequiredFlag through to the Mustache template... + boolean sortParamsByRequiredFlag = true; + if (this.config.additionalProperties().containsKey(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG)) { + sortParamsByRequiredFlag = Boolean.valueOf((String)this.config.additionalProperties().get(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG).toString()); + } + operation.put("sortParamsByRequiredFlag", sortParamsByRequiredFlag); + processMimeTypes(swagger.getConsumes(), operation, "consumes"); processMimeTypes(swagger.getProduces(), operation, "produces"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 7156df2d4e6..30ab4c2382a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -82,7 +82,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig cliOptions.clear(); cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case), default: IO.Swagger")); cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version, default: 1.0.0")); - + cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); } @Override diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java index 8277aa20f10..55bde048155 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java @@ -66,6 +66,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "python package name (convention: snake_case)," + " default: swagger_client")); cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "python package version, default: 1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); } @Override diff --git a/modules/swagger-codegen/src/main/resources/python/api.mustache b/modules/swagger-codegen/src/main/resources/python/api.mustache index b076fa5d3ea..474cf84f356 100644 --- a/modules/swagger-codegen/src/main/resources/python/api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api.mustache @@ -47,7 +47,7 @@ class {{classname}}(object): self.api_client = config.api_client {{#operation}} - def {{nickname}}(self, {{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}**kwargs): + def {{nickname}}(self, {{#sortParamsByRequiredFlag}}{{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}{{/sortParamsByRequiredFlag}}**kwargs): """ {{{summary}}} {{{notes}}} @@ -58,7 +58,12 @@ class {{classname}}(object): >>> def callback_function(response): >>> pprint(response) >>> +{{#sortParamsByRequiredFlag}} >>> thread = api.{{nickname}}({{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}callback=callback_function) +{{/sortParamsByRequiredFlag}} +{{^sortParamsByRequiredFlag}} + >>> thread = api.{{nickname}}({{#allParams}}{{#required}}{{paramName}}={{paramName}}_value, {{/required}}{{/allParams}}callback=callback_function) +{{/sortParamsByRequiredFlag}} :param callback function: The callback function for asynchronous request. (optional) @@ -69,13 +74,6 @@ class {{classname}}(object): If the method is called asynchronously, returns the request thread. """ -{{#allParams}} -{{#required}} - # verify the required parameter '{{paramName}}' is set - if {{paramName}} is None: - raise ValueError("Missing the required parameter `{{paramName}}` when calling `{{nickname}}`") -{{/required}} -{{/allParams}} all_params = [{{#allParams}}'{{paramName}}'{{#hasMore}}, {{/hasMore}}{{/allParams}}] all_params.append('callback') @@ -90,6 +88,14 @@ class {{classname}}(object): params[key] = val del params['kwargs'] +{{#allParams}} +{{#required}} + # verify the required parameter '{{paramName}}' is set + if ('{{paramName}}' not in params) or (params['{{paramName}}'] is None): + raise ValueError("Missing the required parameter `{{paramName}}` when calling `{{nickname}}`") +{{/required}} +{{/allParams}} + resource_path = '{{path}}'.replace('{format}', 'json') method = '{{httpMethod}}' diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java index 5a64e676dcb..5fc990fabcf 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -38,6 +38,7 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest { ImmutableMap.Builder builder = new ImmutableMap.Builder(); return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") .build(); } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java index 645471789e8..6a96efd5c75 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java @@ -38,6 +38,7 @@ public class PythonClientOptionsTest extends AbstractOptionsTest { ImmutableMap.Builder builder = new ImmutableMap.Builder(); return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") .build(); } } From 645b8a01e1f1612792acf16826571173ff272e85 Mon Sep 17 00:00:00 2001 From: cbornet Date: Mon, 2 Nov 2015 16:16:14 +0100 Subject: [PATCH 02/30] provide dependency to javax.annotation.Generated for android --- .../main/resources/Java/build.gradle.mustache | 130 +++++++++--------- .../libraries/jersey2/build.gradle.mustache | 130 +++++++++--------- .../okhttp-gson/build.gradle.mustache | 130 +++++++++--------- .../libraries/retrofit/build.gradle.mustache | 130 +++++++++--------- .../client/petstore/java/default/build.gradle | 130 +++++++++--------- .../client/petstore/java/jersey2/build.gradle | 130 +++++++++--------- .../petstore/java/okhttp-gson/build.gradle | 106 +++++++++++--- .../petstore/java/retrofit/build.gradle | 130 +++++++++--------- 8 files changed, 556 insertions(+), 460 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache index 971dcd816a4..2725cbe1f86 100644 --- a/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = '{{artifactId}}' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = '{{artifactId}}' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } ext { diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache index 548c1854e5e..09262af0d63 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = '{{artifactId}}' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = '{{artifactId}}' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } ext { diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache index 289f9a6df72..9741cb13d10 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = '{{artifactId}}' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = '{{artifactId}}' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } dependencies { diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache index a285745505a..7072c8752f5 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = '{{artifactId}}' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = '{{artifactId}}' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } ext { diff --git a/samples/client/petstore/java/default/build.gradle b/samples/client/petstore/java/default/build.gradle index baa5ce97b01..b7ccd1df774 100644 --- a/samples/client/petstore/java/default/build.gradle +++ b/samples/client/petstore/java/default/build.gradle @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = 'swagger-java-client' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = 'swagger-java-client' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } ext { diff --git a/samples/client/petstore/java/jersey2/build.gradle b/samples/client/petstore/java/jersey2/build.gradle index 9727e5693e6..85ad4f048b9 100644 --- a/samples/client/petstore/java/jersey2/build.gradle +++ b/samples/client/petstore/java/jersey2/build.gradle @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = 'swagger-petstore-jersey2' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = 'swagger-petstore-jersey2' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } ext { diff --git a/samples/client/petstore/java/okhttp-gson/build.gradle b/samples/client/petstore/java/okhttp-gson/build.gradle index ada6a992573..c739b5e1a23 100644 --- a/samples/client/petstore/java/okhttp-gson/build.gradle +++ b/samples/client/petstore/java/okhttp-gson/build.gradle @@ -1,11 +1,93 @@ -apply plugin: 'java' -apply plugin: 'maven' +group = 'io.swagger' +version = '1.0.0' -sourceCompatibility = JavaVersion.VERSION_1_7 -targetCompatibility = JavaVersion.VERSION_1_7 +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.2.2' + classpath 'com.github.dcendents:android-maven-plugin:1.2' + } +} repositories { - mavenCentral() + jcenter() +} + + +if(hasProperty('target') && target == 'android') { + + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } + +} else { + + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = 'swagger-petstore-okhttp-gson' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } dependencies { @@ -15,17 +97,3 @@ dependencies { compile 'com.brsanthu:migbase64:2.2' testCompile 'junit:junit:4.8.1' } - -group = 'io.swagger' -version = '1.0.0' - -install { - repositories.mavenInstaller { - pom.artifactId = 'swagger-petstore-okhttp-gson' - } -} - -task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath -} diff --git a/samples/client/petstore/java/retrofit/build.gradle b/samples/client/petstore/java/retrofit/build.gradle index 710d9da9a54..255a76e0403 100644 --- a/samples/client/petstore/java/retrofit/build.gradle +++ b/samples/client/petstore/java/retrofit/build.gradle @@ -18,72 +18,76 @@ repositories { if(hasProperty('target') && target == 'android') { - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided 'javax.annotation:jsr250-api:1.0' + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } } else { - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = 'swagger-petstore-retrofit' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + apply plugin: 'java' + apply plugin: 'maven' + + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + + install { + repositories.mavenInstaller { + pom.artifactId = 'swagger-petstore-retrofit' + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } } ext { From 1a67f452e2bffc92fa9fcbedbdbae199d6604d58 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 4 Nov 2015 20:51:56 +0800 Subject: [PATCH 03/30] Make parameters unique in generated code through a config option "ensureUniqueParams" which is false by default Closes #1422 --- .../io/swagger/codegen/CodegenConstants.java | 3 ++ .../io/swagger/codegen/DefaultCodegen.java | 46 ++++++++++++++++++- .../codegen/languages/JavaClientCodegen.java | 1 + .../codegen/languages/RubyClientCodegen.java | 12 ++++- .../src/main/resources/Java/api.mustache | 2 +- .../java/io/swagger/client/api/PetApi.java | 4 +- 6 files changed, 63 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index 2e53ab42797..684eea14fc5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -40,6 +40,9 @@ public class CodegenConstants { public static final String SORT_PARAMS_BY_REQUIRED_FLAG = "sortParamsByRequiredFlag"; public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters. Default: true"; + public static final String ENSURE_UNIQUE_PARAMS = "ensureUniqueParams"; + public static final String ENSURE_UNIQUE_PARAMS_DESC = "Whether to ensure parameter names are unique in an operation (rename parameters that are not). Default: false"; + public static final String PACKAGE_NAME = "packageName"; public static final String PACKAGE_VERSION = "packageVersion"; public static final String POD_VERSION = "podVersion"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 7fa3d1883b6..4aa5af77fc7 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -87,6 +87,7 @@ public class DefaultCodegen { protected Map supportedLibraries = new LinkedHashMap(); protected String library = null; protected Boolean sortParamsByRequiredFlag = true; + protected Boolean ensureUniqueParams = false; public List cliOptions() { return cliOptions; @@ -109,6 +110,11 @@ public class DefaultCodegen { this.setSortParamsByRequiredFlag(Boolean.valueOf(additionalProperties .get(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG).toString())); } + + if (additionalProperties.containsKey(CodegenConstants.ENSURE_UNIQUE_PARAMS)) { + this.setEnsureUniqueParams(Boolean.valueOf(additionalProperties + .get(CodegenConstants.ENSURE_UNIQUE_PARAMS).toString())); + } } // override with any special post-processing @@ -245,6 +251,10 @@ public class DefaultCodegen { this.sortParamsByRequiredFlag = sortParamsByRequiredFlag; } + public void setEnsureUniqueParams(Boolean ensureUniqueParams) { + this.ensureUniqueParams = ensureUniqueParams; + } + /** * Return the file name of the Api * @@ -436,6 +446,7 @@ public class DefaultCodegen { cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); + cliOptions.add(new CliOption(CodegenConstants.ENSURE_UNIQUE_PARAMS, CodegenConstants.ENSURE_UNIQUE_PARAMS_DESC)); } /** @@ -1245,6 +1256,23 @@ public class DefaultCodegen { if (parameters != null) { for (Parameter param : parameters) { CodegenParameter p = fromParameter(param, imports); + // rename parameters to make sure all of them have unique names + if (ensureUniqueParams) { + while (true) { + boolean exists = false; + for (CodegenParameter cp : allParams) { + if (p.paramName.equals(cp.paramName)) { + exists = true; + break; + } + } + if (exists) { + p.paramName = generateNextName(p.paramName); + } else { + break; + } + } + } allParams.add(p); if (param instanceof QueryParameter) { p.isQueryParam = new Boolean(true); @@ -1283,7 +1311,7 @@ public class DefaultCodegen { op.httpMethod = httpMethod.toUpperCase(); // move "required" parameters in front of "optional" parameters - if(sortParamsByRequiredFlag) { + if (sortParamsByRequiredFlag) { Collections.sort(allParams, new Comparator() { @Override public int compare(CodegenParameter one, CodegenParameter another) { @@ -1710,6 +1738,22 @@ public class DefaultCodegen { return word; } + // Generate the next name for the given name, e.g. + // status => status2 + // status2 => status3 + // myName100 => myName101 + private String generateNextName(String name) { + Pattern pattern = Pattern.compile("\\d+\\z"); + Matcher matcher = pattern.matcher(name); + if (matcher.find()) { + String numStr = matcher.group(); + int num = Integer.parseInt(numStr) + 1; + return name.substring(0, name.length() - numStr.length()) + num; + } else { + return name + "2"; + } + } + private void addImport(CodegenModel m, String type) { if (type != null && needToImport(type)) { m.imports.add(type); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index 34b4e0e77d6..ac33bac7c9a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -56,6 +56,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { embeddedTemplateDir = templateDir = "Java"; apiPackage = "io.swagger.client.api"; modelPackage = "io.swagger.client.model"; + ensureUniqueParams = true; reservedWords = new HashSet( Arrays.asList( diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 12dcedd36ae..821919971d5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -2,6 +2,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; @@ -12,6 +13,7 @@ import io.swagger.models.properties.Property; import java.io.File; import java.util.Arrays; import java.util.HashSet; +import java.util.Iterator; import org.apache.commons.lang.StringUtils; @@ -32,6 +34,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { modelTemplateFiles.put("model.mustache", ".rb"); apiTemplateFiles.put("api.mustache", ".rb"); embeddedTemplateDir = templateDir = "ruby"; + ensureUniqueParams = true; typeMapping.clear(); languageSpecificPrimitives.clear(); @@ -70,7 +73,14 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("file", "File"); // remove modelPackage and apiPackage added by default - cliOptions.clear(); + Iterator itr = cliOptions.iterator(); + while (itr.hasNext()) { + CliOption opt = itr.next(); + if (CodegenConstants.MODEL_PACKAGE.equals(opt.getOpt()) || + CodegenConstants.API_PACKAGE.equals(opt.getOpt())) { + itr.remove(); + } + } cliOptions.add(new CliOption(GEM_NAME, "gem name (convention: underscore_case), default: swagger_client")); cliOptions.add(new CliOption(MODULE_NAME, "top module name (convention: CamelCase, usually corresponding to gem name), default: SwaggerClient")); cliOptions.add(new CliOption(GEM_VERSION, "gem version, default: 1.0.0")); diff --git a/modules/swagger-codegen/src/main/resources/Java/api.mustache b/modules/swagger-codegen/src/main/resources/Java/api.mustache index 08d28ebd51b..3ac280b2d70 100644 --- a/modules/swagger-codegen/src/main/resources/Java/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/api.mustache @@ -64,7 +64,7 @@ public class {{classname}} { {{/queryParams}} {{#headerParams}}if ({{paramName}} != null) - {{localVariablePrefix}}headerParams.put("{{baseName}}", {{localVariablePrefix}}apiClient.parameterToString({{paramName}})); + {{localVariablePrefix}}headerParams.put("{{baseName}}", {{localVariablePrefix}}apiClient.parameterToString({{paramName}})); {{/headerParams}} {{#formParams}}if ({{paramName}} != null) diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index 34e29bdc521..17e9a0e299e 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -11,7 +11,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-04T19:58:40.953+08:00") public class PetApi { private ApiClient apiClient; @@ -367,7 +367,7 @@ public class PetApi { if (apiKey != null) - headerParams.put("api_key", apiClient.parameterToString(apiKey)); + headerParams.put("api_key", apiClient.parameterToString(apiKey)); From e9ba5ed57c46abe7f4980a98f0d39e27b05dce2c Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 4 Nov 2015 21:20:16 +0800 Subject: [PATCH 04/30] Fix tests --- .../codegen/options/AkkaScalaClientOptionsProvider.java | 2 ++ .../codegen/options/AndroidClientOptionsProvider.java | 2 ++ .../codegen/options/AsyncScalaClientOptionsProvider.java | 2 ++ .../swagger/codegen/options/DartClientOptionsProvider.java | 2 ++ .../java/io/swagger/codegen/options/JavaOptionsProvider.java | 2 ++ .../swagger/codegen/options/NodeJSServerOptionsProvider.java | 2 ++ .../io/swagger/codegen/options/PhpClientOptionsProvider.java | 2 ++ .../io/swagger/codegen/options/Qt5CPPOptionsProvider.java | 2 ++ .../swagger/codegen/options/RubyClientOptionsProvider.java | 5 +++++ .../swagger/codegen/options/ScalaClientOptionsProvider.java | 2 ++ .../codegen/options/ScalatraServerOptionsProvider.java | 2 ++ .../swagger/codegen/options/SilexServerOptionsProvider.java | 2 ++ .../io/swagger/codegen/options/StaticDocOptionsProvider.java | 2 ++ .../swagger/codegen/options/StaticHtmlOptionsProvider.java | 2 ++ .../io/swagger/codegen/options/SwaggerOptionsProvider.java | 2 ++ .../swagger/codegen/options/SwaggerYamlOptionsProvider.java | 2 ++ .../io/swagger/codegen/options/SwiftOptionsProvider.java | 2 ++ .../swagger/codegen/options/TizenClientOptionsProvider.java | 2 ++ .../options/TypeScriptAngularClientOptionsProvider.java | 2 ++ .../codegen/options/TypeScriptNodeClientOptionsProvider.java | 2 ++ 20 files changed, 43 insertions(+) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AkkaScalaClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AkkaScalaClientOptionsProvider.java index 6cd8e83467b..e26968500d7 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AkkaScalaClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AkkaScalaClientOptionsProvider.java @@ -10,6 +10,7 @@ public class AkkaScalaClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class AkkaScalaClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidClientOptionsProvider.java index 12752d7b636..c677e5caa7b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidClientOptionsProvider.java @@ -13,6 +13,7 @@ public class AndroidClientOptionsProvider implements OptionsProvider { public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String GROUP_ID_VALUE = "io.swagger.test"; public static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String SOURCE_FOLDER_VALUE = "src/main/java/test"; @@ -29,6 +30,7 @@ public class AndroidClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AsyncScalaClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AsyncScalaClientOptionsProvider.java index 3a5daca3ba2..be21a20efe4 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AsyncScalaClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AsyncScalaClientOptionsProvider.java @@ -10,6 +10,7 @@ public class AsyncScalaClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class AsyncScalaClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java index 07689da66da..018913fa3ba 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java @@ -11,6 +11,7 @@ public class DartClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "packagedart"; public static final String API_PACKAGE_VALUE = "apiPackageDart"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String BROWSER_CLIENT_VALUE = "true"; public static final String PUB_NAME_VALUE = "swagger"; public static final String PUB_VERSION_VALUE = "1.0.0-SNAPSHOT"; @@ -28,6 +29,7 @@ public class DartClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(DartClientCodegen.BROWSER_CLIENT, BROWSER_CLIENT_VALUE) .put(DartClientCodegen.PUB_NAME, PUB_NAME_VALUE) .put(DartClientCodegen.PUB_VERSION, PUB_VERSION_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java index 26d4c893236..8ea7ee31452 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java @@ -20,6 +20,7 @@ public class JavaOptionsProvider implements OptionsProvider { public static final String LIBRARY_VALUE = "jersey2"; public static final String SERIALIZABLE_MODEL_VALUE = "false"; public static final String FULL_JAVA_UTIL_VALUE = "true"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public Map createOptions() { @@ -27,6 +28,7 @@ public class JavaOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java index 09500bd65ea..d4cfce1c9b7 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java @@ -10,6 +10,7 @@ public class NodeJSServerOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class NodeJSServerOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PhpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PhpClientOptionsProvider.java index fd1fbabbe5d..dcd7a06438f 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PhpClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PhpClientOptionsProvider.java @@ -11,6 +11,7 @@ public class PhpClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String VARIABLE_NAMING_CONVENTION_VALUE = "snake_case"; public static final String INVOKER_PACKAGE_VALUE = "Swagger\\Client\\Php"; public static final String PACKAGE_PATH_VALUE = "SwaggerClient-php"; @@ -30,6 +31,7 @@ public class PhpClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(PhpClientCodegen.VARIABLE_NAMING_CONVENTION, VARIABLE_NAMING_CONVENTION_VALUE) .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) .put(PhpClientCodegen.PACKAGE_PATH, PACKAGE_PATH_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java index 1deb7a99afc..c0583639fbe 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java @@ -10,6 +10,7 @@ public class Qt5CPPOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class Qt5CPPOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/RubyClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/RubyClientOptionsProvider.java index 94f15cc1def..d80341f0200 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/RubyClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/RubyClientOptionsProvider.java @@ -1,5 +1,6 @@ package io.swagger.codegen.options; +import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.languages.RubyClientCodegen; import com.google.common.collect.ImmutableMap; @@ -10,6 +11,8 @@ public class RubyClientOptionsProvider implements OptionsProvider { public static final String GEM_NAME_VALUE = "swagger_client_ruby"; public static final String MODULE_NAME_VALUE = "SwaggerClientRuby"; public static final String GEM_VERSION_VALUE = "1.0.0-SNAPSHOT"; + public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +25,8 @@ public class RubyClientOptionsProvider implements OptionsProvider { return builder.put(RubyClientCodegen.GEM_NAME, GEM_NAME_VALUE) .put(RubyClientCodegen.MODULE_NAME, MODULE_NAME_VALUE) .put(RubyClientCodegen.GEM_VERSION, GEM_VERSION_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalaClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalaClientOptionsProvider.java index 5d9b80b2670..867482f145b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalaClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalaClientOptionsProvider.java @@ -10,6 +10,7 @@ public class ScalaClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class ScalaClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalatraServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalatraServerOptionsProvider.java index 0e237f1b1e9..a0fef2f4858 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalatraServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ScalatraServerOptionsProvider.java @@ -10,6 +10,7 @@ public class ScalatraServerOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class ScalatraServerOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java index 35d290ada7a..553b24414f6 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java @@ -10,6 +10,7 @@ public class SilexServerOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class SilexServerOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java index fcef6a436cf..5cd8325606c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java @@ -10,6 +10,7 @@ public class StaticDocOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class StaticDocOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java index d0067b60117..5fe534b52c1 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java @@ -10,6 +10,7 @@ public class StaticHtmlOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class StaticHtmlOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java index 81b8059b9e9..4d1997484e2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java @@ -10,6 +10,7 @@ public class SwaggerOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class SwaggerOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java index f611dc9c88c..1797e2888fb 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java @@ -10,6 +10,7 @@ public class SwaggerYamlOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class SwaggerYamlOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java index c5600d4f590..a31159abf1c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java @@ -11,6 +11,7 @@ public class SwiftOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String PROJECT_NAME_VALUE = "Swagger"; public static final String RESPONSE_AS_VALUE = "test"; public static final String UNWRAP_REQUIRED_VALUE = "true"; @@ -38,6 +39,7 @@ public class SwiftOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(SwiftCodegen.PROJECT_NAME, PROJECT_NAME_VALUE) .put(SwiftCodegen.RESPONSE_AS, RESPONSE_AS_VALUE) .put(SwiftCodegen.UNWRAP_REQUIRED, UNWRAP_REQUIRED_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java index 796aabc6b31..80194388da0 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java @@ -10,6 +10,7 @@ public class TizenClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class TizenClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java index 24ce25b4578..2b69f5e12f1 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java @@ -10,6 +10,7 @@ public class TypeScriptAngularClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class TypeScriptAngularClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java index 5da5c01c991..6a7ac239f15 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java @@ -10,6 +10,7 @@ public class TypeScriptNodeClientOptionsProvider implements OptionsProvider { public static final String MODEL_PACKAGE_VALUE = "package"; public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @Override public String getLanguage() { @@ -22,6 +23,7 @@ public class TypeScriptNodeClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } From 5a7bb600d639d71322d093b1befec64cf5c7a6b3 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 4 Nov 2015 21:28:52 +0800 Subject: [PATCH 05/30] Set the ensureUniqueParams option to true by default --- .../src/main/java/io/swagger/codegen/CodegenConstants.java | 2 +- .../src/main/java/io/swagger/codegen/DefaultCodegen.java | 2 +- .../java/io/swagger/codegen/languages/JavaClientCodegen.java | 1 - .../java/io/swagger/codegen/languages/RubyClientCodegen.java | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index 684eea14fc5..4910058034c 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -41,7 +41,7 @@ public class CodegenConstants { public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters. Default: true"; public static final String ENSURE_UNIQUE_PARAMS = "ensureUniqueParams"; - public static final String ENSURE_UNIQUE_PARAMS_DESC = "Whether to ensure parameter names are unique in an operation (rename parameters that are not). Default: false"; + public static final String ENSURE_UNIQUE_PARAMS_DESC = "Whether to ensure parameter names are unique in an operation (rename parameters that are not). Default: true"; public static final String PACKAGE_NAME = "packageName"; public static final String PACKAGE_VERSION = "packageVersion"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 4aa5af77fc7..f9cf4c90baf 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -87,7 +87,7 @@ public class DefaultCodegen { protected Map supportedLibraries = new LinkedHashMap(); protected String library = null; protected Boolean sortParamsByRequiredFlag = true; - protected Boolean ensureUniqueParams = false; + protected Boolean ensureUniqueParams = true; public List cliOptions() { return cliOptions; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index ac33bac7c9a..34b4e0e77d6 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -56,7 +56,6 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { embeddedTemplateDir = templateDir = "Java"; apiPackage = "io.swagger.client.api"; modelPackage = "io.swagger.client.model"; - ensureUniqueParams = true; reservedWords = new HashSet( Arrays.asList( diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 821919971d5..0c1275a00e5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -34,7 +34,6 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { modelTemplateFiles.put("model.mustache", ".rb"); apiTemplateFiles.put("api.mustache", ".rb"); embeddedTemplateDir = templateDir = "ruby"; - ensureUniqueParams = true; typeMapping.clear(); languageSpecificPrimitives.clear(); From 9863b631f7fad466e0e229f1c42a4fb465223830 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 5 Nov 2015 11:23:15 +0800 Subject: [PATCH 06/30] Fix comment to conform to javadoc guideline --- .../java/io/swagger/codegen/DefaultCodegen.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index f9cf4c90baf..675091da120 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -1738,10 +1738,16 @@ public class DefaultCodegen { return word; } - // Generate the next name for the given name, e.g. - // status => status2 - // status2 => status3 - // myName100 => myName101 + /** + * Generate the next name for the given name, i.e. append "2" to the base name if not ending with a number, + * otherwise increase the number by 1. For example: + * status => status2 + * status2 => status3 + * myName100 => myName101 + * + * @param name The base name + * @return The next name for the base name + */ private String generateNextName(String name) { Pattern pattern = Pattern.compile("\\d+\\z"); Matcher matcher = pattern.matcher(name); From 4bfc032a640d25a9cca47075c9651fe730c3ad4c Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 5 Nov 2015 16:32:46 +0800 Subject: [PATCH 07/30] add oauth2 support for Perl --- .../src/main/resources/perl/ApiClient.mustache | 2 +- .../src/main/resources/perl/Configuration.mustache | 8 ++++++-- .../petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm | 2 +- .../petstore/perl/lib/WWW/SwaggerClient/Configuration.pm | 8 ++++++-- samples/client/petstore/perl/t/02_store_api.t | 5 +++-- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache index 06aae8a0e55..0cdb40325c5 100644 --- a/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache @@ -323,7 +323,7 @@ sub update_params_for_auth { } {{#authMethods}}elsif ($auth eq '{{name}}') { {{#isApiKey}}{{#isKeyInHeader}}$header_params->{'{{keyParamName}}'} = $self->get_api_key_with_prefix('{{keyParamName}}');{{/isKeyInHeader}}{{#isKeyInQuery}}$query_params->{'{{keyParamName}}'} = $self->get_api_key_with_prefix('{{keyParamName}}');{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}$header_params->{'Authorization'} = 'Basic '.encode_base64($WWW::{{moduleName}}::Configuration::username.":".$WWW::{{moduleName}}::Configuration::password);{{/isBasic}} - {{#isOAuth}}# TODO support oauth{{/isOAuth}} + {{#isOAuth}}$header_params->{'Authorization'} = 'Bearer ' . $WWW::{{moduleName}}::Configuration::access_token;{{/isOAuth}} } {{/authMethods}} else { diff --git a/modules/swagger-codegen/src/main/resources/perl/Configuration.mustache b/modules/swagger-codegen/src/main/resources/perl/Configuration.mustache index 0a097dda7bd..d0b8b2c0e68 100644 --- a/modules/swagger-codegen/src/main/resources/perl/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/perl/Configuration.mustache @@ -17,8 +17,12 @@ our $http_user_agent = 'Perl-Swagger'; # authenticaiton setting our $api_key = {}; our $api_key_prefix = {}; -our $username; -our $password; +# username and password for HTTP basic authentication +our $username = ''; +our $password = ''; + +# access token for OAuth +our $access_token = ''; 1; diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm index de4a3e2d2fb..7ed19c328c3 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm @@ -327,7 +327,7 @@ sub update_params_for_auth { } elsif ($auth eq 'petstore_auth') { - # TODO support oauth + $header_params->{'Authorization'} = 'Bearer ' . $WWW::SwaggerClient::Configuration::access_token; } else { diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Configuration.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Configuration.pm index aaa387236d9..6a4afe254e0 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Configuration.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Configuration.pm @@ -17,8 +17,12 @@ our $http_user_agent = 'Perl-Swagger'; # authenticaiton setting our $api_key = {}; our $api_key_prefix = {}; -our $username; -our $password; +# username and password for HTTP basic authentication +our $username = ''; +our $password = ''; + +# access token for OAuth +our $access_token = ''; 1; diff --git a/samples/client/petstore/perl/t/02_store_api.t b/samples/client/petstore/perl/t/02_store_api.t index c731273271d..dfee5c46839 100644 --- a/samples/client/petstore/perl/t/02_store_api.t +++ b/samples/client/petstore/perl/t/02_store_api.t @@ -1,4 +1,4 @@ -use Test::More tests => 42; +use Test::More tests => 41; use Test::Exception; use lib 'lib'; @@ -22,7 +22,8 @@ is $store_api->{api_client}->{base_url}, 'http://petstore.swagger.io/v2', 'get t my $get_inventory_response = $store_api->get_inventory(); -like ($get_inventory_response->{pending}, qr/^\d+$/, "pending is numeric"); +# comment out pending check as sometimes there's no object with pending status +#like ($get_inventory_response->{pending}, qr/^\d+$/, "pending is numeric"); like ($get_inventory_response->{sold}, qr/^\d+$/, "sold is numeric"); my $pet_json = < Date: Thu, 5 Nov 2015 17:12:51 +0800 Subject: [PATCH 08/30] add homebrew --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index ec693d92483..f250419f216 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Check out [Swagger-Spec](https://github.com/swagger-api/swagger-spec) for additi - [Docker](#docker) - [Build and run](#build-and-run-using-docker) - [Build a Node.js server stub](#build-a-nodejs-server-stub) + - [Homebrew](#homebrew) - Generators - [To generate a sample client library](#to-generate-a-sample-client-library) - [Generating libraries from your server](#generating-libraries-from-your-server) @@ -99,6 +100,15 @@ cd swagger-codegen -o samples/server/petstore/nodejs ``` +### Homebrew +To install, run `brew install swagger-codegen` + +Here is an example usage: +``` +swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l ruby -o /tmp/test/ +``` + + ### To generate a sample client library You can build a client against the swagger sample [petstore](http://petstore.swagger.io) API as follows: From 76eeb51af628c301444007382c1269d440f0ee8a Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 5 Nov 2015 20:02:09 +0800 Subject: [PATCH 09/30] Support collectionFormat in Ruby client for header, query and form parameters --- .../io/swagger/codegen/DefaultCodegen.java | 3 ++ .../src/main/resources/ruby/api.mustache | 12 +++---- .../main/resources/ruby/api_client.mustache | 32 +++++++++++++++++-- samples/client/petstore/ruby/lib/petstore.rb | 2 +- .../petstore/ruby/lib/petstore/api/pet_api.rb | 6 ++-- .../petstore/ruby/lib/petstore/api_client.rb | 32 +++++++++++++++++-- .../petstore/ruby/spec/api_client_spec.rb | 29 +++++++++++++++++ 7 files changed, 100 insertions(+), 16 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 675091da120..b5a6f88f14d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -1446,6 +1446,9 @@ public class DefaultCodegen { } property = new ArrayProperty(inner); collectionFormat = qp.getCollectionFormat(); + if (collectionFormat == null) { + collectionFormat = "csv"; + } CodegenProperty pr = fromProperty("inner", inner); p.baseType = pr.datatype; p.isContainer = true; diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index ad885dac94e..a43260c0607 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -36,8 +36,8 @@ module {{moduleName}} # query parameters query_params = {}{{#queryParams}}{{#required}} - query_params[:'{{{baseName}}}'] = {{{paramName}}}{{/required}}{{/queryParams}}{{#queryParams}}{{^required}} - query_params[:'{{{baseName}}}'] = opts[:'{{{paramName}}}'] if opts[:'{{{paramName}}}']{{/required}}{{/queryParams}} + query_params[:'{{{baseName}}}'] = {{#collectionFormat}}@api_client.build_collection_param({{{paramName}}}, :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}{{{paramName}}}{{/collectionFormat}}{{/required}}{{/queryParams}}{{#queryParams}}{{^required}} + query_params[:'{{{baseName}}}'] = {{#collectionFormat}}@api_client.build_collection_param(opts[:'{{{paramName}}}'], :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}opts[:'{{{paramName}}}']{{/collectionFormat}} if opts[:'{{{paramName}}}']{{/required}}{{/queryParams}} # header parameters header_params = {} @@ -49,13 +49,13 @@ module {{moduleName}} # HTTP header 'Content-Type' _header_content_type = [{{#consumes}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/consumes}}] header_params['Content-Type'] = @api_client.select_header_content_type(_header_content_type){{#headerParams}}{{#required}} - header_params[:'{{{baseName}}}'] = {{{paramName}}}{{/required}}{{/headerParams}}{{#headerParams}}{{^required}} - header_params[:'{{{baseName}}}'] = opts[:'{{{paramName}}}'] if opts[:'{{{paramName}}}']{{/required}}{{/headerParams}} + header_params[:'{{{baseName}}}'] = {{#collectionFormat}}@api_client.build_collection_param({{{paramName}}}, :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}{{{paramName}}}{{/collectionFormat}}{{/required}}{{/headerParams}}{{#headerParams}}{{^required}} + header_params[:'{{{baseName}}}'] = {{#collectionFormat}}@api_client.build_collection_param(opts[:'{{{paramName}}}'], :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}opts[:'{{{paramName}}}']{{/collectionFormat}} if opts[:'{{{paramName}}}']{{/required}}{{/headerParams}} # form parameters form_params = {}{{#formParams}}{{#required}} - form_params["{{baseName}}"] = {{paramName}}{{/required}}{{/formParams}}{{#formParams}}{{^required}} - form_params["{{baseName}}"] = opts[:'{{paramName}}'] if opts[:'{{paramName}}']{{/required}}{{/formParams}} + form_params["{{baseName}}"] = {{#collectionFormat}}@api_client.build_collection_param({{{paramName}}}, :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}{{{paramName}}}{{/collectionFormat}}{{/required}}{{/formParams}}{{#formParams}}{{^required}} + form_params["{{baseName}}"] = {{#collectionFormat}}@api_client.build_collection_param(opts[:'{{{paramName}}}'], :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}opts[:'{{{paramName}}}']{{/collectionFormat}} if opts[:'{{paramName}}']{{/required}}{{/formParams}} # http body (model) {{^bodyParam}}post_body = nil diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache index 2bdcf6dc7be..4ef665bddf2 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache @@ -189,9 +189,15 @@ module {{moduleName}} # http form if header_params['Content-Type'] == 'application/x-www-form-urlencoded' || header_params['Content-Type'] == 'multipart/form-data' - data = form_params.dup - data.each do |key, value| - data[key] = value.to_s if value && !value.is_a?(File) + data = {} + form_params.each do |key, value| + case value + when File, Array, nil + # let typhoeus handle File, Array and nil parameters + data[key] = value + else + data[key] = value.to_s + end end elsif body data = body.is_a?(String) ? body : body.to_json @@ -269,5 +275,25 @@ module {{moduleName}} obj end end + + # Build parameter value according to the given collection format. + # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi + def build_collection_param(param, collection_format) + case collection_format + when :csv + param.join(',') + when :ssv + param.join(' ') + when :tsv + param.join("\t") + when :pipes + param.join('|') + when :multi + # return the array directly as typhoeus will handle it as expected + param + else + fail "unknown collection format: #{collection_format.inspect}" + end + end end end diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb index 61640d687ac..c13e99f29fc 100644 --- a/samples/client/petstore/ruby/lib/petstore.rb +++ b/samples/client/petstore/ruby/lib/petstore.rb @@ -14,8 +14,8 @@ require 'petstore/models/order' # APIs require 'petstore/api/user_api' -require 'petstore/api/pet_api' require 'petstore/api/store_api' +require 'petstore/api/pet_api' module Petstore class << self diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 4b956aeadcc..887f86dd45c 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -117,7 +117,7 @@ module Petstore # query parameters query_params = {} - query_params[:'status'] = opts[:'status'] if opts[:'status'] + query_params[:'status'] = @api_client.build_collection_param(opts[:'status'], :multi) if opts[:'status'] # header parameters header_params = {} @@ -166,7 +166,7 @@ module Petstore # query parameters query_params = {} - query_params[:'tags'] = opts[:'tags'] if opts[:'tags'] + query_params[:'tags'] = @api_client.build_collection_param(opts[:'tags'], :multi) if opts[:'tags'] # header parameters header_params = {} @@ -237,7 +237,7 @@ module Petstore post_body = nil - auth_names = ['api_key', 'petstore_auth'] + auth_names = ['api_key'] result = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index 4f747bcd6a1..92a61bac4a6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -189,9 +189,15 @@ module Petstore # http form if header_params['Content-Type'] == 'application/x-www-form-urlencoded' || header_params['Content-Type'] == 'multipart/form-data' - data = form_params.dup - data.each do |key, value| - data[key] = value.to_s if value && !value.is_a?(File) + data = {} + form_params.each do |key, value| + case value + when File, Array, nil + # let typhoeus handle File, Array and nil parameters + data[key] = value + else + data[key] = value.to_s + end end elsif body data = body.is_a?(String) ? body : body.to_json @@ -269,5 +275,25 @@ module Petstore obj end end + + # Build parameter value according to the given collection format. + # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi + def build_collection_param(param, collection_format) + case collection_format + when :csv + param.join(',') + when :ssv + param.join(' ') + when :tsv + param.join("\t") + when :pipes + param.join('|') + when :multi + # return the array directly as typhoeus will handle it as expected + param + else + fail "unknown collection format: #{collection_format.inspect}" + end + end end end diff --git a/samples/client/petstore/ruby/spec/api_client_spec.rb b/samples/client/petstore/ruby/spec/api_client_spec.rb index cd9016c9a0b..eeb27300bf3 100644 --- a/samples/client/petstore/ruby/spec/api_client_spec.rb +++ b/samples/client/petstore/ruby/spec/api_client_spec.rb @@ -116,4 +116,33 @@ describe Petstore::ApiClient do end end + describe "#build_collection_param" do + let(:param) { ['aa', 'bb', 'cc'] } + let(:api_client) { Petstore::ApiClient.new } + + it "works for csv" do + api_client.build_collection_param(param, :csv).should == 'aa,bb,cc' + end + + it "works for ssv" do + api_client.build_collection_param(param, :ssv).should == 'aa bb cc' + end + + it "works for tsv" do + api_client.build_collection_param(param, :tsv).should == "aa\tbb\tcc" + end + + it "works for pipes" do + api_client.build_collection_param(param, :pipes).should == 'aa|bb|cc' + end + + it "works for multi" do + api_client.build_collection_param(param, :multi).should == ['aa', 'bb', 'cc'] + end + + it "fails for invalid collection format" do + proc { api_client.build_collection_param(param, :INVALID) }.should raise_error + end + end + end From dadc85b6fd43153bec534093e24f2974f573cad5 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 2 Nov 2015 14:46:31 -0800 Subject: [PATCH 10/30] added resource, method stub for generator options --- .../swagger/generator/online/Generator.java | 5 +++++ .../generator/resource/SwaggerResource.java | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index fd095e6c198..7a5802ea783 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -20,10 +20,15 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Map; public class Generator { static Logger LOGGER = LoggerFactory.getLogger(Generator.class); + public static Map getOptions(String language) { + return null; + } + public enum Type { CLIENT("client"), SERVER("server"); diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java index fa6a4785c5b..256a13d3adf 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java @@ -89,6 +89,26 @@ public class SwaggerResource { return Response.status(500).build(); } } + + @GET + @Path("/clients/{language}") + @ApiOperation( + value = "Returns options for a client library", + response = String.class, + responseContainer = "map", + tags = "clients") + public Response getClientOptions( + @Context HttpServletRequest request, + @ApiParam(value = "The target language for the client library", required = true) @PathParam("language") String language) throws Exception { + + Map opts = Generator.getOptions(language); + + if (opts != null) { + return Response.ok().entity(opts).build(); + } else { + return Response.status(404).build(); + } + } @GET @Path("/clients") From 5d8c23dd09aac2a78333e2658258ee9609661dcc Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Mon, 2 Nov 2015 18:28:36 +0300 Subject: [PATCH 11/30] CliOption hah been change to allow enum values --- .../io/swagger/codegen/cmd/ConfigHelp.java | 2 +- .../java/io/swagger/codegen/CliOption.java | 58 +++++++++++++++++++ .../codegen/languages/JavaClientCodegen.java | 4 +- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/ConfigHelp.java b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/ConfigHelp.java index f7a128613b9..eb2f8afea92 100644 --- a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/ConfigHelp.java +++ b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/ConfigHelp.java @@ -20,7 +20,7 @@ public class ConfigHelp implements Runnable { System.out.println("CONFIG OPTIONS"); for (CliOption langCliOption : config.cliOptions()) { System.out.println("\t" + langCliOption.getOpt()); - System.out.println("\t " + langCliOption.getDescription().replaceAll("\n", "\n\t ")); + System.out.println("\t " + langCliOption.getOptionHelp().replaceAll("\n", "\n\t ")); System.out.println(); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java index 1aa0937b31b..d8bea87d8eb 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java @@ -1,12 +1,25 @@ package io.swagger.codegen; +import io.swagger.models.properties.StringProperty; + +import java.util.LinkedHashMap; +import java.util.Map; + public class CliOption { private final String opt; private String description; + private String type; + private String defaultValue; + private Map enumValues; public CliOption(String opt, String description) { + this(opt, description, StringProperty.TYPE); + } + + public CliOption(String opt, String description, String type) { this.opt = opt; this.description = description; + this.type = type; } public String getOpt() { @@ -20,4 +33,49 @@ public class CliOption { public void setDescription(String description) { this.description = description; } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDefault() { + return defaultValue; + } + + public void setDefault(String defaultValue) { + this.defaultValue = defaultValue; + } + + public CliOption addEnum(String value, String description) { + if (this.enumValues == null) { + this.enumValues = new LinkedHashMap(); + } + if (!enumValues.containsKey(value)) { + enumValues.put(value, description); + } + return this; + } + + public Map getEnum() { + return enumValues; + } + + public void setEnum(Map enumValues) { + this.enumValues = enumValues; + this.type = "enum"; + } + + public String getOptionHelp() { + StringBuilder sb = new StringBuilder(description); + if (enumValues != null) { + for (Map.Entry entry : enumValues.entrySet()) { + sb.append("\n").append(entry.getKey()).append(" - ").append(entry.getValue()); + } + } + return sb.toString(); + } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index 34b4e0e77d6..fd0c1826690 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -96,7 +96,9 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { supportedLibraries.put("jersey2", "HTTP client: Jersey client 2.6"); supportedLibraries.put("okhttp-gson", "HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.1"); supportedLibraries.put("retrofit", "HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.1 (Retrofit 1.9.0)"); - cliOptions.add(buildLibraryCliOption(supportedLibraries)); + CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use:"); + library.setEnum(supportedLibraries); + cliOptions.add(library); } @Override From 4eeee3b24dbddd47888b7948719879aa4c745b2e Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Tue, 3 Nov 2015 11:12:28 +0300 Subject: [PATCH 12/30] changed resource, method stub for generator options --- .../swagger/generator/online/Generator.java | 18 +++++- .../generator/resource/SwaggerResource.java | 33 ++++++++-- .../online/OnlineGeneratorOptionsTest.java | 63 ++++++++++++++++++- 3 files changed, 107 insertions(+), 7 deletions(-) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index 7a5802ea783..e709e777dd4 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -1,6 +1,8 @@ package io.swagger.generator.online; import com.fasterxml.jackson.databind.JsonNode; + +import io.swagger.codegen.CliOption; import io.swagger.codegen.ClientOptInput; import io.swagger.codegen.ClientOpts; import io.swagger.codegen.Codegen; @@ -14,19 +16,31 @@ import io.swagger.generator.util.ZipUtil; import io.swagger.models.Swagger; import io.swagger.parser.SwaggerParser; import io.swagger.util.Json; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class Generator { static Logger LOGGER = LoggerFactory.getLogger(Generator.class); - public static Map getOptions(String language) { - return null; + public static Map getOptions(String language) throws ApiException { + CodegenConfig config = null; + try { + config = CodegenConfigLoader.forName(language); + } catch (Exception e) { + throw new BadRequestException(400, String.format("Unsupported target %s supplied. %s", language, e)); + } + Map map = new LinkedHashMap(); + for (CliOption option : config.cliOptions()) { + map.put(option.getOpt(), option); + } + return map; } public enum Type { diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java index 256a13d3adf..d6fa88efcf8 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java @@ -3,6 +3,7 @@ package io.swagger.generator.resource; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import io.swagger.codegen.CliOption; import io.swagger.codegen.Codegen; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenType; @@ -89,19 +90,43 @@ public class SwaggerResource { return Response.status(500).build(); } } - + @GET @Path("/clients/{language}") + @Produces({MediaType.APPLICATION_JSON}) @ApiOperation( value = "Returns options for a client library", - response = String.class, + response = CliOption.class, responseContainer = "map", tags = "clients") public Response getClientOptions( @Context HttpServletRequest request, - @ApiParam(value = "The target language for the client library", required = true) @PathParam("language") String language) throws Exception { + @ApiParam(value = "The target language for the client library", required = true) + @PathParam("language") String language) throws Exception { - Map opts = Generator.getOptions(language); + Map opts = Generator.getOptions(language); + + if (opts != null) { + return Response.ok().entity(opts).build(); + } else { + return Response.status(404).build(); + } + } + + @GET + @Path("/server/{framework}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation( + value = "Returns options for a server framework", + response = CliOption.class, + responseContainer = "map", + tags = "clients") + public Response getServerOptions( + @Context HttpServletRequest request, + @ApiParam(value = "The target language for the server framework", required = true) + @PathParam("framework") String framework) throws Exception { + + Map opts = Generator.getOptions(framework); if (opts != null) { return Response.ok().entity(opts).build(); diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java index 31262a24a9a..4a3113613bb 100644 --- a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java @@ -1,7 +1,11 @@ package io.swagger.generator.online; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; +import static org.testng.Assert.assertNotNull; +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConfigLoader; import io.swagger.codegen.options.AkkaScalaClientOptionsProvider; import io.swagger.codegen.options.AndroidClientOptionsProvider; import io.swagger.codegen.options.AsyncScalaClientOptionsProvider; @@ -37,6 +41,9 @@ import io.swagger.generator.exception.ApiException; import io.swagger.generator.model.GeneratorInput; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -47,8 +54,13 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Objects; + +import javax.annotation.Nullable; public class OnlineGeneratorOptionsTest { private static final String OPTIONS_PROVIDER = "optionsProvider"; @@ -74,7 +86,7 @@ public class OnlineGeneratorOptionsTest { } @Test(dataProvider = OPTIONS_PROVIDER) - public void optionsTest(OptionsProvider provider) throws ApiException, IOException { + public void generateOptionsTest(OptionsProvider provider) throws ApiException, IOException { final GeneratorInput input = new GeneratorInput(); final HashMap options = convertOptions(provider); @@ -137,4 +149,53 @@ public class OnlineGeneratorOptionsTest { return value; } } + + @Test(dataProvider = OPTIONS_PROVIDER) + public void getOptionsTest(OptionsProvider provider) throws ApiException { + final Map opts = Generator.getOptions(provider.getLanguage()); + + final Function cliOptionWrapper = new Function() { + @Nullable + @Override + public CliOptionProxy apply(@Nullable CliOption option) { + return new CliOptionProxy(option); + } + }; + + final List actual = Lists.transform(new ArrayList(opts.values()), cliOptionWrapper); + final List expected = Lists.transform( + CodegenConfigLoader.forName(provider.getLanguage()).cliOptions(), cliOptionWrapper); + assertEquals(actual, expected); + } + + private static class CliOptionProxy { + private final CliOption wrapped; + + public CliOptionProxy(CliOption wrapped){ + this.wrapped = wrapped; + } + + public CliOption getWrapped() { + return wrapped; + } + + @Override + public int hashCode() { + return Objects.hash(wrapped.getOpt(), wrapped.getDescription(), wrapped.getType(), + wrapped.getDefault(), wrapped.getEnum()); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof CliOptionProxy) { + final CliOption that = ((CliOptionProxy) obj).getWrapped(); + return Objects.equals(wrapped.getOpt(), that.getOpt()) + && Objects.equals(wrapped.getDescription(), that.getDescription()) + && Objects.equals(wrapped.getType(), that.getType()) + && Objects.equals(wrapped.getDefault(), that.getDefault()) + && Objects.equals(wrapped.getEnum(), that.getEnum()); + } + return false; + } + } } From dcd8302f4216596d7af64d534f70b2c7db85fbae Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Thu, 5 Nov 2015 12:02:19 +0300 Subject: [PATCH 13/30] added @ApiModelProperty and @JsonIgnore annotations, set defailtValue to java library option --- .../java/io/swagger/codegen/CliOption.java | 17 ++++++++++-- .../io/swagger/codegen/CodegenConstants.java | 2 +- .../io/swagger/codegen/DefaultCodegen.java | 3 ++- .../languages/AndroidClientCodegen.java | 3 ++- .../languages/CSharpClientCodegen.java | 5 ++-- .../languages/CsharpDotNet2ClientCodegen.java | 8 +++--- .../codegen/languages/FlashClientCodegen.java | 6 ++--- .../codegen/languages/JavaClientCodegen.java | 10 ++++--- .../codegen/languages/ObjcClientCodegen.java | 18 ++++++++----- .../codegen/languages/PerlClientCodegen.java | 4 +-- .../codegen/languages/PhpClientCodegen.java | 3 ++- .../languages/PythonClientCodegen.java | 7 ++--- .../codegen/languages/RubyClientCodegen.java | 8 +++--- .../generator/resource/SwaggerResource.java | 2 +- .../online/OnlineGeneratorOptionsTest.java | 2 +- .../online/OnlineJavaClientOptionsTest.java | 26 +++++++++++++++++++ 16 files changed, 90 insertions(+), 34 deletions(-) create mode 100644 modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java index d8bea87d8eb..b2732f9cd1e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CliOption.java @@ -1,7 +1,10 @@ package io.swagger.codegen; +import io.swagger.annotations.ApiModelProperty; import io.swagger.models.properties.StringProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; + import java.util.LinkedHashMap; import java.util.Map; @@ -22,6 +25,7 @@ public class CliOption { this.type = type; } + @ApiModelProperty(name = "optionName") public String getOpt() { return opt; } @@ -34,6 +38,7 @@ public class CliOption { this.description = description; } + @ApiModelProperty(value = "Data type is based on the types supported by the JSON-Schema") public String getType() { return type; } @@ -50,6 +55,11 @@ public class CliOption { this.defaultValue = defaultValue; } + public CliOption defaultValue(String defaultValue) { + this.defaultValue = defaultValue; + return this; + } + public CliOption addEnum(String value, String description) { if (this.enumValues == null) { this.enumValues = new LinkedHashMap(); @@ -66,14 +76,17 @@ public class CliOption { public void setEnum(Map enumValues) { this.enumValues = enumValues; - this.type = "enum"; } + @JsonIgnore public String getOptionHelp() { StringBuilder sb = new StringBuilder(description); + if(defaultValue != null) { + sb.append(" (Default: ").append(defaultValue).append(")"); + } if (enumValues != null) { for (Map.Entry entry : enumValues.entrySet()) { - sb.append("\n").append(entry.getKey()).append(" - ").append(entry.getValue()); + sb.append("\n ").append(entry.getKey()).append(" - ").append(entry.getValue()); } } return sb.toString(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index 4910058034c..a5bb97e5a93 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -38,7 +38,7 @@ public class CodegenConstants { public static final String LIBRARY_DESC = "library template (sub-template)"; public static final String SORT_PARAMS_BY_REQUIRED_FLAG = "sortParamsByRequiredFlag"; - public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters. Default: true"; + public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters."; public static final String ENSURE_UNIQUE_PARAMS = "ensureUniqueParams"; public static final String ENSURE_UNIQUE_PARAMS_DESC = "Whether to ensure parameter names are unique in an operation (rename parameters that are not). Default: true"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 675091da120..8ab40633c87 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -445,7 +445,8 @@ public class DefaultCodegen { cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); - cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); + cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, + CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue("true")); cliOptions.add(new CliOption(CodegenConstants.ENSURE_UNIQUE_PARAMS, CodegenConstants.ENSURE_UNIQUE_PARAMS_DESC)); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java index 35b876aabaf..abfe970088b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java @@ -65,7 +65,8 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, "artifactId for use in the generated build.gradle and pom.xml")); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, "artifact version for use in the generated build.gradle and pom.xml")); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC)); - cliOptions.add(new CliOption(USE_ANDROID_MAVEN_GRADLE_PLUGIN, "A flag to toggle android-maven gradle plugin. Default is true.")); + cliOptions.add(new CliOption(USE_ANDROID_MAVEN_GRADLE_PLUGIN, "A flag to toggle android-maven gradle plugin.") + .defaultValue("true")); } public CodegenType getTag() { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index d2d14e5a2e5..a7972253188 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -80,8 +80,9 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("object", "Object"); cliOptions.clear(); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case), default: IO.Swagger")); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version, default: 1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case).") + .defaultValue("IO.Swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version.").defaultValue("1.0.0")); cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java index 96f74907449..7b6bf5e7844 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java @@ -79,9 +79,11 @@ public class CsharpDotNet2ClientCodegen extends DefaultCodegen implements Codege typeMapping.put("object", "Object"); cliOptions.clear(); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case), default: IO.Swagger")); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version, default: 1.0.0")); - cliOptions.add(new CliOption(CLIENT_PACKAGE, "C# client package name (convention: Camel.Case), default: IO.Swagger.Client")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case).") + .defaultValue("IO.Swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version.").defaultValue("1.0.0")); + cliOptions.add(new CliOption(CLIENT_PACKAGE, "C# client package name (convention: Camel.Case).") + .defaultValue("IO.Swagger.Client")); } @Override diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java index 353174df056..8608cbe8924 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java @@ -75,9 +75,9 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig cliOptions.clear(); cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "flash package name (convention:" + - " package.name), default: io.swagger")); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "flash package version, " + - "default: 1.0.0")); + " package.name)").defaultValue("io.swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "flash package version") + .defaultValue("1.0.0")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated " + "code. e.g. src/main/flex")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index fd0c1826690..a54ec4e038a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory; public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(JavaClientCodegen.class); public static final String FULL_JAVA_UTIL = "fullJavaUtil"; + public static final String DEFAULT_LIBRARY = ""; protected String invokerPackage = "io.swagger.client"; protected String groupId = "io.swagger"; @@ -90,14 +91,17 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC)); cliOptions.add(new CliOption(CodegenConstants.LOCAL_VARIABLE_PREFIX, CodegenConstants.LOCAL_VARIABLE_PREFIX_DESC)); cliOptions.add(new CliOption(CodegenConstants.SERIALIZABLE_MODEL, CodegenConstants.SERIALIZABLE_MODEL_DESC)); - cliOptions.add(new CliOption(FULL_JAVA_UTIL, "whether to use fully qualified name for classes under java.util (default to false)")); + cliOptions.add(new CliOption(FULL_JAVA_UTIL, "whether to use fully qualified name for classes under java.util") + .defaultValue("false")); - supportedLibraries.put("", "HTTP client: Jersey client 1.18. JSON processing: Jackson 2.4.2"); + supportedLibraries.put(DEFAULT_LIBRARY, "HTTP client: Jersey client 1.18. JSON processing: Jackson 2.4.2"); supportedLibraries.put("jersey2", "HTTP client: Jersey client 2.6"); supportedLibraries.put("okhttp-gson", "HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.1"); supportedLibraries.put("retrofit", "HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.1 (Retrofit 1.9.0)"); - CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use:"); + CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); + library.setDefault(DEFAULT_LIBRARY); library.setEnum(supportedLibraries); + library.setDefault(DEFAULT_LIBRARY); cliOptions.add(library); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java index a3e1463d857..4555aa5f216 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java @@ -120,13 +120,17 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { instantiationTypes.put("map", "NSMutableDictionary"); cliOptions.clear(); - cliOptions.add(new CliOption(CLASS_PREFIX, "prefix for generated classes (convention: Abbreviation of pod name e.g. `HN` for `HackerNews`), default: `SWG`")); - cliOptions.add(new CliOption(POD_NAME, "cocoapods package name (convention: CameCase), default: `SwaggerClient`")); - cliOptions.add(new CliOption(CodegenConstants.POD_VERSION, "cocoapods package version, default: `1.0.0`")); - cliOptions.add(new CliOption(AUTHOR_NAME, "Name to use in the podspec file, default: `Swagger`")); - cliOptions.add(new CliOption(AUTHOR_EMAIL, "Email to use in the podspec file, default: `apiteam@swagger.io`")); - cliOptions.add(new CliOption(GIT_REPO_URL, "URL for the git repo where this podspec should point to, default: `https://github.com/swagger-api/swagger-codegen`")); - cliOptions.add(new CliOption(LICENSE, "License to use in the podspec file, default: `MIT`")); + cliOptions.add(new CliOption(CLASS_PREFIX, "prefix for generated classes (convention: Abbreviation of pod name e.g. `HN` for `HackerNews`).`") + .defaultValue("SWG")); + cliOptions.add(new CliOption(POD_NAME, "cocoapods package name (convention: CameCase).") + .defaultValue("SwaggerClient")); + cliOptions.add(new CliOption(CodegenConstants.POD_VERSION, "cocoapods package version.") + .defaultValue("1.0.0")); + cliOptions.add(new CliOption(AUTHOR_NAME, "Name to use in the podspec file.").defaultValue("Swagger")); + cliOptions.add(new CliOption(AUTHOR_EMAIL, "Email to use in the podspec file.").defaultValue("apiteam@swagger.io")); + cliOptions.add(new CliOption(GIT_REPO_URL, "URL for the git repo where this podspec should point to.") + .defaultValue("https://github.com/swagger-api/swagger-codegen")); + cliOptions.add(new CliOption(LICENSE, "License to use in the podspec file.").defaultValue("MIT")); } public CodegenType getTag() { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index ba03f3944c5..0a64854712b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -70,8 +70,8 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("object", "object"); cliOptions.clear(); - cliOptions.add(new CliOption(MODULE_NAME, "perl module name (convention: CamelCase), default: SwaggerClient")); - cliOptions.add(new CliOption(MODULE_VERSION, "perl module version, default: 1.0.0")); + cliOptions.add(new CliOption(MODULE_NAME, "perl module name (convention: CamelCase).").defaultValue("SwaggerClient")); + cliOptions.add(new CliOption(MODULE_VERSION, "perl module version.").defaultValue("1.0.0")); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java index cc852371573..4653d6a5299 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java @@ -91,7 +91,8 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("object", "object"); typeMapping.put("DateTime", "\\DateTime"); - cliOptions.add(new CliOption(VARIABLE_NAMING_CONVENTION, "naming convention of variable name, e.g. camelCase. Default: snake_case")); + cliOptions.add(new CliOption(VARIABLE_NAMING_CONVENTION, "naming convention of variable name, e.g. camelCase.") + .defaultValue("snake_case")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, "The main namespace to use for all classes. e.g. Yay\\Pets")); cliOptions.add(new CliOption(PACKAGE_PATH, "The main package name for classes. e.g. GeneratedPetstore")); cliOptions.add(new CliOption(SRC_BASE_PATH, "The directory under packagePath to serve as source root.")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java index 585493664fc..1759e515258 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java @@ -63,9 +63,10 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig "return", "def", "for", "lambda", "try")); cliOptions.clear(); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "python package name (convention: snake_case)," + - " default: swagger_client")); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "python package version, default: 1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "python package name (convention: snake_case).") + .defaultValue("swagger_client")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "python package version.") + .defaultValue("1.0.0")); cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 0c1275a00e5..f30b2ef8b85 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -80,9 +80,11 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { itr.remove(); } } - cliOptions.add(new CliOption(GEM_NAME, "gem name (convention: underscore_case), default: swagger_client")); - cliOptions.add(new CliOption(MODULE_NAME, "top module name (convention: CamelCase, usually corresponding to gem name), default: SwaggerClient")); - cliOptions.add(new CliOption(GEM_VERSION, "gem version, default: 1.0.0")); + cliOptions.add(new CliOption(GEM_NAME, "gem name (convention: underscore_case)."). + defaultValue("swagger_client")); + cliOptions.add(new CliOption(MODULE_NAME, "top module name (convention: CamelCase, usually corresponding" + + " to gem name).").defaultValue("SwaggerClient")); + cliOptions.add(new CliOption(GEM_VERSION, "gem version.").defaultValue("1.0.0")); } @Override diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java index d6fa88efcf8..4f9e5d99c5b 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java @@ -120,7 +120,7 @@ public class SwaggerResource { value = "Returns options for a server framework", response = CliOption.class, responseContainer = "map", - tags = "clients") + tags = "servers") public Response getServerOptions( @Context HttpServletRequest request, @ApiParam(value = "The target language for the server framework", required = true) diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java index 4a3113613bb..fc015f433ea 100644 --- a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java @@ -81,7 +81,7 @@ public class OnlineGeneratorOptionsTest { {new StaticDocOptionsProvider()}, {new StaticHtmlOptionsProvider()}, {new SwaggerOptionsProvider()}, {new SwaggerYamlOptionsProvider()}, {new SwiftOptionsProvider()}, {new TizenClientOptionsProvider()}, - {new TypeScriptAngularClientOptionsProvider()}, {new TypeScriptNodeClientOptionsProvider()}, + {new TypeScriptAngularClientOptionsProvider()}, {new TypeScriptNodeClientOptionsProvider()} }; } diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java new file mode 100644 index 00000000000..93277a6a2f9 --- /dev/null +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java @@ -0,0 +1,26 @@ +package io.swagger.generator.online; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.JavaClientCodegen; +import io.swagger.codegen.options.JavaOptionsProvider; +import io.swagger.generator.exception.ApiException; + +import org.testng.annotations.Test; + +import java.util.Map; + +public class OnlineJavaClientOptionsTest { + + @Test + public void getOptionsTest() throws ApiException { + final Map options = Generator.getOptions(new JavaOptionsProvider().getLanguage()); + assertNotNull(options); + final CliOption opt = options.get(CodegenConstants.LIBRARY); + assertNotNull(opt); + assertEquals(opt.getDefault(), JavaClientCodegen.DEFAULT_LIBRARY); + } +} From 4a5a8b73635fea5e9157e92d45ac36db222409af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Hovm=C3=B6ller?= Date: Thu, 5 Nov 2015 15:40:05 +0100 Subject: [PATCH 14/30] Some spelling and grammar fixes --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f250419f216..664b8e20ef1 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ You need the following installed and available in your $PATH: #### OS X Users Don't forget to install Java 7. You probably have 1.6 or 1.8. -Export JAVA_HOME in order to user proper Java version: +Export JAVA_HOME in order to use the supported Java version: ``` export JAVA_HOME=`/usr/libexec/java_home -v 1.7` export PATH=${JAVA_HOME}/bin:$PATH @@ -125,7 +125,7 @@ java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ -o samples/client/petstore/java ``` -With a number of options. You can get the options with the `help generate` command: +with a number of options. You can get the options with the `help generate` command: ``` NAME @@ -365,7 +365,7 @@ Your config file for java can look like For all the unspecified options default values will be used. -Another way to override default options is to extend config class for specific language. +Another way to override default options is to extend the config class for the specific language. To change, for example, the prefix for the Objective-C generated files, simply subclass the ObjcClientCodegen.java: ``` @@ -486,7 +486,7 @@ Note! The templates are included in the library generated. If you want to modi ## Online generators -One can also generate API client or sever using the online generators (https://generator.swagger.io) +One can also generate API client or server using the online generators (https://generator.swagger.io) For example, to generate Ruby API client, simply send the following HTTP request using curl: ``` From 080e302c63a1d9371c82a4df49e586871dbbe91f Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 5 Nov 2015 22:47:53 +0800 Subject: [PATCH 15/30] fix csharp import for file in model files --- .../src/main/resources/csharp/model.mustache | 1 + .../main/csharp/IO/Swagger/Model/Category.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Order.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Pet.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Tag.cs | 1 + .../src/main/csharp/IO/Swagger/Model/User.cs | 1 + .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 18999 -> 18999 bytes .../obj/Debug/SwaggerClientTest.dll.mdb | Bin 18999 -> 18999 bytes 8 files changed, 6 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/csharp/model.mustache b/modules/swagger-codegen/src/main/resources/csharp/model.mustache index 99da4f8302a..d40ece4cc02 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/model.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/model.mustache @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs index c402188b9fc..56ebfdb3b7b 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs index 07b3d14e598..1fa62c1605a 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs index 41216b52802..37c80259944 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs index 10ace1ad185..7d2ea38833b 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs index d22ac54c094..5430d1182cb 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 1a9c96751ba6290fd50c539ee4bd6b9d4a4deced..f63c1d21fe32bf28941f603b407f4784e17247ab 100644 GIT binary patch delta 1148 zcmY+COH31C6ov0lpfjBXh!i5NKzS^n6iQei3l)PQ8WN2OooT0!8I-s%K?UPlKvd)< z@DpLdBZ44_SPE!}iJ*}R#3-UsL&Dn#E>x6mLonO5KRS!g;?|3 zTZ;~6Uu=C@*?FqxjA2);QHBKH!YJ#h#GLx5TP+Ou} zs}VP%lui@$np_@@0KZG8<+WHenV3POA(dW#MK&gT8E`RujBG*f7?Up;7-hyVl`JF3 zX$EGPSzj7Ot}?L3tYaD@KCdNjuu#t4WWBx;)sZbMw6bj?)p~M}iUe_3M-H&?kbQ)Q z6VRky?MRi4=2=)^7qKQ$9r=reO?C^@1LEv{veFDy=4!L|QHjQocg)ak?(k6D1gXeG zSxI?>8FePS-J5xW~}X-JVGmYI^Gmj7BUJ?wy|j%N;eo0iLrq~AN> zgX7~aMTIG9i&S0|UCcuXU&?zoBpOHG=An^q!c?j)lJ4Q*0q^vsvGj8uMtC=-Ml|pF z9;wV|dWDA{{73avQdIZ7OI8UxX=F^4!eph`9D`wx0?_hJA5 delta 1148 zcmY+CT}V@L7{=e@bUSC~#x|z3mUC0VoO4si=pqa(2qc1V=WJ&m=Op%dQHXclPso>;2s$%(AHa8=qoM8;}1wKwvIZWU@y z841-z``6=;j|dglGe&lrtXcvHB38AO3*T~=b0Go%B2@~B8dN0?D0P%MLR62MQ*;Ks zxM5WJ9nj?n1T_L83iISOGnz=*Ph=pq#d1kDCc792Fx`x7L2en7&lwnH#xRvE_2fqe zrkLq)Y9xO$u)?fjY7(C}kXKl!U@O^>uS8AcZ5HmZ%_21fbC8N;ao9xmu<)4e#ly*H z!lLupWusXZ=Gb|xNz_EHv9Qi=V7gD7-A!I|LY1@H8G2NrX0pWztyk zf?!d5s)f*^x2ZapTq!l@f_c{`mux{Pq~!6`x(ha3zr$$~RmDLySHp#7rHp#2m4i0! z?lwhPR-IJ}nnbmJrj!3#13l=2A>UJFec=1cg{hC~zT>pV2_O_)lx#nBIVc*y(1X#)L>hhcsMQyZEMevedU zJiW}rcm4;~GR2DH=rRGyh08+d%}ivn>wE`9Z5JI7pj&u^HHpU4qXLWxFEBkU`%DQi mEzE?|1bRh)RpD2V;-k=tqrsyjBEMaU2JJb-*&cPeb?1MBQuN;d diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb index 1a9c96751ba6290fd50c539ee4bd6b9d4a4deced..f63c1d21fe32bf28941f603b407f4784e17247ab 100644 GIT binary patch delta 1148 zcmY+COH31C6ov0lpfjBXh!i5NKzS^n6iQei3l)PQ8WN2OooT0!8I-s%K?UPlKvd)< z@DpLdBZ44_SPE!}iJ*}R#3-UsL&Dn#E>x6mLonO5KRS!g;?|3 zTZ;~6Uu=C@*?FqxjA2);QHBKH!YJ#h#GLx5TP+Ou} zs}VP%lui@$np_@@0KZG8<+WHenV3POA(dW#MK&gT8E`RujBG*f7?Up;7-hyVl`JF3 zX$EGPSzj7Ot}?L3tYaD@KCdNjuu#t4WWBx;)sZbMw6bj?)p~M}iUe_3M-H&?kbQ)Q z6VRky?MRi4=2=)^7qKQ$9r=reO?C^@1LEv{veFDy=4!L|QHjQocg)ak?(k6D1gXeG zSxI?>8FePS-J5xW~}X-JVGmYI^Gmj7BUJ?wy|j%N;eo0iLrq~AN> zgX7~aMTIG9i&S0|UCcuXU&?zoBpOHG=An^q!c?j)lJ4Q*0q^vsvGj8uMtC=-Ml|pF z9;wV|dWDA{{73avQdIZ7OI8UxX=F^4!eph`9D`wx0?_hJA5 delta 1148 zcmY+CT}V@L7{=e@bUSC~#x|z3mUC0VoO4si=pqa(2qc1V=WJ&m=Op%dQHXclPso>;2s$%(AHa8=qoM8;}1wKwvIZWU@y z841-z``6=;j|dglGe&lrtXcvHB38AO3*T~=b0Go%B2@~B8dN0?D0P%MLR62MQ*;Ks zxM5WJ9nj?n1T_L83iISOGnz=*Ph=pq#d1kDCc792Fx`x7L2en7&lwnH#xRvE_2fqe zrkLq)Y9xO$u)?fjY7(C}kXKl!U@O^>uS8AcZ5HmZ%_21fbC8N;ao9xmu<)4e#ly*H z!lLupWusXZ=Gb|xNz_EHv9Qi=V7gD7-A!I|LY1@H8G2NrX0pWztyk zf?!d5s)f*^x2ZapTq!l@f_c{`mux{Pq~!6`x(ha3zr$$~RmDLySHp#7rHp#2m4i0! z?lwhPR-IJ}nnbmJrj!3#13l=2A>UJFec=1cg{hC~zT>pV2_O_)lx#nBIVc*y(1X#)L>hhcsMQyZEMevedU zJiW}rcm4;~GR2DH=rRGyh08+d%}ivn>wE`9Z5JI7pj&u^HHpU4qXLWxFEBkU`%DQi mEzE?|1bRh)RpD2V;-k=tqrsyjBEMaU2JJb-*&cPeb?1MBQuN;d From cdd20ac4089ebccfb847f5d83d8f46ca9890284f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 5 Nov 2015 18:19:21 -0800 Subject: [PATCH 16/30] updated swagger definitions for opts --- .../generator/DynamicSwaggerConfig.java | 35 ++++++++++--------- .../swagger/generator/online/Generator.java | 16 ++++++++- .../generator/resource/SwaggerResource.java | 35 ++++++++++++------- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java b/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java index ee5792850c5..974b938a1aa 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java @@ -26,35 +26,36 @@ public class DynamicSwaggerConfig extends BeanConfig { Parameter framework = post.getParameters().get(0); if (framework instanceof PathParameter) { PathParameter param = (PathParameter) framework; - StringBuilder b = new StringBuilder(); - for (String client : clients) { - if (b.toString().length() > 0) { - b.append(", "); - } - b.append(client); - } - param.setDescription("available clients: " + b.toString()); param.setEnum(clients); } + + Operation get = clientPath.getGet(); + if(get != null) { + framework = get.getParameters().get(0); + if (framework instanceof PathParameter) { + PathParameter param = (PathParameter) framework; + param.setEnum(clients); + } + } } Path serverPath = swagger.getPaths().get("/gen/servers/{framework}"); - // update the path description based on what servers are available via SPI if (serverPath != null) { Operation post = serverPath.getPost(); Parameter framework = post.getParameters().get(0); if (framework instanceof PathParameter) { PathParameter param = (PathParameter) framework; - StringBuilder b = new StringBuilder(); - for (String server : servers) { - if (b.toString().length() > 0) { - b.append(", "); - } - b.append(server); - } - param.setDescription("available servers: " + b.toString()); param.setEnum(servers); } + + Operation get = serverPath.getGet(); + if(get != null) { + framework = get.getParameters().get(0); + if (framework instanceof PathParameter) { + PathParameter param = (PathParameter) framework; + param.setEnum(servers); + } + } } return swagger.info(getInfo()) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index e709e777dd4..a5c14e43715 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -109,7 +109,7 @@ public class Generator { codegenConfig.setOutputDir(outputFolder); - Json.prettyPrint(clientOpts); + LOGGER.debug(Json.pretty(clientOpts)); clientOptInput.setConfig(codegenConfig); @@ -124,6 +124,20 @@ public class Generator { } else { throw new BadRequestException(400, "A target generation was attempted, but no files were created!"); } + for(File file: files) { + try { + file.delete(); + } + catch(Exception e) { + LOGGER.error("unable to delete file " + file.getAbsolutePath()); + } + } + try { + new File(outputFolder).delete(); + } + catch (Exception e) { + LOGGER.error("unable to delete output folder " + outputFolder); + } } catch (Exception e) { throw new BadRequestException(500, "Unable to build target: " + e.getMessage()); } diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java index 4f9e5d99c5b..343692f8385 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java @@ -12,16 +12,14 @@ import io.swagger.generator.model.Generated; import io.swagger.generator.model.GeneratorInput; import io.swagger.generator.model.ResponseCode; import io.swagger.generator.online.Generator; +import org.apache.commons.io.FileUtils; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; import javax.ws.rs.core.Context; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import javax.servlet.http.HttpServletRequest; +import java.io.File; import java.util.*; @Path("/gen") @@ -35,6 +33,9 @@ public class SwaggerResource { @Path("/download/{fileId}") @Produces({MediaType.APPLICATION_OCTET_STREAM}) @ApiOperation(value = "Downloads a pre-generated file", + notes = "A valid `fileId` is generated by the `/clients/{language}` or `/servers/{language}` POST " + + "operations. The fileId code can be used just once, after which a new `fileId` will need to " + + "be requested.", response = String.class, tags = {"clients", "servers"}) public Response downloadFile(@PathParam("fileId") String fileId) throws Exception { @@ -42,7 +43,15 @@ public class SwaggerResource { System.out.println("looking for fileId " + fileId); System.out.println("got filename " + g.getFilename()); if (g.getFilename() != null) { - byte[] bytes = org.apache.commons.io.FileUtils.readFileToByteArray(new java.io.File(g.getFilename())); + File file = new java.io.File(g.getFilename()); + byte[] bytes = org.apache.commons.io.FileUtils.readFileToByteArray(file); + + try { + FileUtils.deleteDirectory(file.getParentFile()); + } + catch (Exception e) { + System.out.println("failed to delete file " + file.getAbsolutePath()); + } return Response.ok(bytes, "application/zip") .header("Content-Disposition", "attachment; filename=\"" + g.getFriendlyName() + "-generated.zip\"") @@ -57,7 +66,8 @@ public class SwaggerResource { @POST @Path("/clients/{language}") @ApiOperation( - value = "Generates a client library based on the config", + value = "Generates a client library", + notes = "Accepts a `GeneratorInput` options map for spec location and generation options", response = ResponseCode.class, tags = "clients") public Response generateClient( @@ -78,7 +88,7 @@ public class SwaggerResource { String host = scheme + "://" + request.getServerName() + port; if (filename != null) { - String code = String.valueOf(System.currentTimeMillis()); + String code = String.valueOf(UUID.randomUUID().toString()); Generated g = new Generated(); g.setFilename(filename); g.setFriendlyName(language + "-client"); @@ -114,7 +124,7 @@ public class SwaggerResource { } @GET - @Path("/server/{framework}") + @Path("/servers/{framework}") @Produces({MediaType.APPLICATION_JSON}) @ApiOperation( value = "Returns options for a server framework", @@ -161,7 +171,8 @@ public class SwaggerResource { @POST @Path("/servers/{framework}") - @ApiOperation(value = "Generates a server library for the supplied server framework", + @ApiOperation(value = "Generates a server library", + notes = "Accepts a `GeneratorInput` options map for spec location and generation options.", response = ResponseCode.class, tags = "servers") public Response generateServerForLanguage( @@ -178,7 +189,7 @@ public class SwaggerResource { String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); if (filename != null) { - String code = String.valueOf(System.currentTimeMillis()); + String code = String.valueOf(UUID.randomUUID().toString()); Generated g = new Generated(); g.setFilename(filename); g.setFriendlyName(framework + "-server"); From c4b2f210bea2b6b03a7acef25b6702548ff42755 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 5 Nov 2015 18:49:11 -0800 Subject: [PATCH 17/30] fixed context path --- .../swagger-codegen/src/main/resources/JavaJaxRS/web.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache index ae6f6d4d692..2046f433bb9 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache @@ -41,7 +41,7 @@ jersey - /* + {{contextPath}}/* ApiOriginFilter From b30cbd92614ca4ef71db7d7bed11abe4b6ef70ad Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 5 Nov 2015 18:52:23 -0800 Subject: [PATCH 18/30] correctly set host --- .../swagger-codegen/src/main/resources/JavaJaxRS/web.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache index 2046f433bb9..8cd666106f9 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/web.mustache @@ -34,7 +34,7 @@ swagger.api.basepath - http://localhost:8080 + {{basePath}} 2 From c8ea36e188b63d9188e1d89dded51362fa6d3d9b Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 5 Nov 2015 18:52:47 -0800 Subject: [PATCH 19/30] rebuilt --- .../gen/java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/gen/java/io/swagger/api/PetApi.java | 22 +- .../java/io/swagger/api/PetApiService.java | 2 +- .../src/gen/java/io/swagger/api/StoreApi.java | 8 +- .../java/io/swagger/api/StoreApiService.java | 2 +- .../src/gen/java/io/swagger/api/UserApi.java | 16 +- .../java/io/swagger/api/UserApiService.java | 2 +- .../gen/java/io/swagger/model/Category.java | 2 +- .../src/gen/java/io/swagger/model/Order.java | 2 +- .../src/gen/java/io/swagger/model/Pet.java | 2 +- .../src/gen/java/io/swagger/model/Tag.java | 2 +- .../src/gen/java/io/swagger/model/User.java | 2 +- .../api/factories/PetApiServiceFactory.java | 2 +- .../api/factories/StoreApiServiceFactory.java | 2 +- .../api/factories/UserApiServiceFactory.java | 2 +- .../swagger/api/impl/PetApiServiceImpl.java | 2 +- .../swagger/api/impl/StoreApiServiceImpl.java | 2 +- .../swagger/api/impl/UserApiServiceImpl.java | 2 +- .../jaxrs/src/main/webapp/WEB-INF/web.xml | 4 +- .../java/io/swagger/client/ApiClient.java | 553 ------------------ .../java/io/swagger/client/ApiException.java | 48 -- .../java/io/swagger/client/Configuration.java | 22 - .../src/test/java/io/swagger/client/JSON.java | 52 -- .../src/test/java/io/swagger/client/Pair.java | 39 -- .../java/io/swagger/client/StringUtil.java | 42 -- .../test/java/io/swagger/client/TypeRef.java | 26 - .../java/io/swagger/client/api/PetApi.java | 407 ------------- .../java/io/swagger/client/api/StoreApi.java | 215 ------- .../java/io/swagger/client/api/UserApi.java | 386 ------------ .../io/swagger/client/auth/ApiKeyAuth.java | 59 -- .../swagger/client/auth/Authentication.java | 12 - .../io/swagger/client/auth/HttpBasicAuth.java | 41 -- .../java/io/swagger/client/auth/OAuth.java | 14 - .../io/swagger/client/model/Category.java | 53 -- .../java/io/swagger/client/model/Order.java | 114 ---- .../java/io/swagger/client/model/Pet.java | 116 ---- .../java/io/swagger/client/model/Tag.java | 53 -- .../java/io/swagger/client/model/User.java | 138 ----- .../integration/ResourceListingTestIT.java | 85 --- 42 files changed, 43 insertions(+), 2518 deletions(-) delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiClient.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiException.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Configuration.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/JSON.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Pair.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/StringUtil.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/TypeRef.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/PetApi.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/StoreApi.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/UserApi.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/ApiKeyAuth.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/Authentication.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/HttpBasicAuth.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/OAuth.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Category.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Order.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Pet.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Tag.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/User.java delete mode 100644 samples/server/petstore/jaxrs/src/test/java/io/swagger/test/integration/ResourceListingTestIT.java diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java index ad8ae3aff94..5fbf037b2ff 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java index 3c45b7e282f..1c5dade251c 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java index 1bddb4087ae..91264320d2c 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java index 37f7328aaf7..7b5055536d2 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java index 260523279cd..d8918a855f9 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class PetApi { private final PetApiService delegate = PetApiServiceFactory.getPetApi(); @@ -48,7 +48,7 @@ public class PetApi { @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = Void.class) }) - public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) + public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) throws NotFoundException { return delegate.updatePet(body); } @@ -65,7 +65,7 @@ public class PetApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) - public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) + public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) throws NotFoundException { return delegate.addPet(body); } @@ -121,7 +121,7 @@ public class PetApi { @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Pet.class) }) - public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("petId") Long petId) + public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("petId") Long petId) throws NotFoundException { return delegate.getPetById(petId); } @@ -138,9 +138,9 @@ public class PetApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) - public Response updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated",required=true ) @PathParam("petId") String petId, - @ApiParam(value = "Updated name of the pet" )@FormParam("name") String name, - @ApiParam(value = "Updated status of the pet" )@FormParam("status") String status) + public Response updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated",required=true) @PathParam("petId") String petId, + @ApiParam(value = "Updated name of the pet")@FormParam("name") String name, + @ApiParam(value = "Updated status of the pet")@FormParam("status") String status) throws NotFoundException { return delegate.updatePetWithForm(petId,name,status); } @@ -157,8 +157,8 @@ public class PetApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value", response = Void.class) }) - public Response deletePet(@ApiParam(value = "Pet id to delete",required=true ) @PathParam("petId") Long petId, - @ApiParam(value = "" )@HeaderParam("api_key") String apiKey) + public Response deletePet(@ApiParam(value = "Pet id to delete",required=true) @PathParam("petId") Long petId, + @ApiParam(value = "" )@HeaderParam("api_key") String apiKey) throws NotFoundException { return delegate.deletePet(petId,apiKey); } @@ -175,8 +175,8 @@ public class PetApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) - public Response uploadFile(@ApiParam(value = "ID of pet to update",required=true ) @PathParam("petId") Long petId, - @ApiParam(value = "Additional data to pass to server" )@FormParam("additionalMetadata") String additionalMetadata, + public Response uploadFile(@ApiParam(value = "ID of pet to update",required=true) @PathParam("petId") Long petId, + @ApiParam(value = "Additional data to pass to server")@FormParam("additionalMetadata") String additionalMetadata, @FormDataParam("file") InputStream inputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws NotFoundException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java index 8171555b0d0..edb656bba4b 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public abstract class PetApiService { public abstract Response updatePet(Pet body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java index 63fac7c2b34..c75b7c0b005 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class StoreApi { private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); @@ -55,7 +55,7 @@ public class StoreApi { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid Order", response = Order.class) }) - public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body) + public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body) throws NotFoundException { return delegate.placeOrder(body); } @@ -71,7 +71,7 @@ public class StoreApi { @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Order.class) }) - public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("orderId") String orderId) + public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("orderId") String orderId) throws NotFoundException { return delegate.getOrderById(orderId); } @@ -85,7 +85,7 @@ public class StoreApi { @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Void.class) }) - public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true ) @PathParam("orderId") String orderId) + public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true) @PathParam("orderId") String orderId) throws NotFoundException { return delegate.deleteOrder(orderId); } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java index dc8274ce739..20dd92d9cd9 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public abstract class StoreApiService { public abstract Response getInventory() diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java index cade9a3b2f1..9a1b8187021 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class UserApi { private final UserApiService delegate = UserApiServiceFactory.getUserApi(); @@ -39,7 +39,7 @@ public class UserApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) - public Response createUser(@ApiParam(value = "Created user object" ) User body) + public Response createUser(@ApiParam(value = "Created user object" ) User body) throws NotFoundException { return delegate.createUser(body); } @@ -51,7 +51,7 @@ public class UserApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) - public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body) + public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body) throws NotFoundException { return delegate.createUsersWithArrayInput(body); } @@ -63,7 +63,7 @@ public class UserApi { @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) - public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body) + public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body) throws NotFoundException { return delegate.createUsersWithListInput(body); } @@ -106,7 +106,7 @@ public class UserApi { @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = User.class) }) - public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.",required=true ) @PathParam("username") String username) + public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.",required=true) @PathParam("username") String username) throws NotFoundException { return delegate.getUserByName(username); } @@ -120,8 +120,8 @@ public class UserApi { @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) - public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true ) @PathParam("username") String username, - @ApiParam(value = "Updated user object" ) User body) + public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true) @PathParam("username") String username, + @ApiParam(value = "Updated user object" ) User body) throws NotFoundException { return delegate.updateUser(username,body); } @@ -135,7 +135,7 @@ public class UserApi { @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) - public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true ) @PathParam("username") String username) + public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true) @PathParam("username") String username) throws NotFoundException { return delegate.deleteUser(username); } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java index 175aa32757a..efd8a3fe9a4 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public abstract class UserApiService { public abstract Response createUser(User body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java index 9aed596a768..e390c5b806c 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java index 8a5c22a38ac..59c85b3d7d8 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java index f3e1cfa17f2..f0d2790a8ac 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java index fe723eea4d8..83434c8b812 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java index ea890100a74..6aa15fe86b4 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") public class User { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java index c3a7cbf8bf7..1110a6abad9 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java @@ -3,7 +3,7 @@ package io.swagger.api.factories; import io.swagger.api.PetApiService; import io.swagger.api.impl.PetApiServiceImpl; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T22:18:00.553-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") public class PetApiServiceFactory { private final static PetApiService service = new PetApiServiceImpl(); diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java index 9eb7af458dd..cd3cd1fa9e2 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java @@ -3,7 +3,7 @@ package io.swagger.api.factories; import io.swagger.api.StoreApiService; import io.swagger.api.impl.StoreApiServiceImpl; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T22:18:00.553-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") public class StoreApiServiceFactory { private final static StoreApiService service = new StoreApiServiceImpl(); diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java index 2f381c6b459..2be6d83827a 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java @@ -3,7 +3,7 @@ package io.swagger.api.factories; import io.swagger.api.UserApiService; import io.swagger.api.impl.UserApiServiceImpl; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T22:18:00.553-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") public class UserApiServiceFactory { private final static UserApiService service = new UserApiServiceImpl(); diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java index c7ee88aaf63..3432c17d0b0 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T22:18:00.553-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") public class PetApiServiceImpl extends PetApiService { @Override diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java index 7dbf5e75dd2..96a7d50cd3a 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T22:18:00.553-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") public class StoreApiServiceImpl extends StoreApiService { @Override diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java index cdbc9afed19..1d5eeab2cd6 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T22:18:00.553-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") public class UserApiServiceImpl extends UserApiService { @Override diff --git a/samples/server/petstore/jaxrs/src/main/webapp/WEB-INF/web.xml b/samples/server/petstore/jaxrs/src/main/webapp/WEB-INF/web.xml index 80df1cd180d..bde33eae91a 100644 --- a/samples/server/petstore/jaxrs/src/main/webapp/WEB-INF/web.xml +++ b/samples/server/petstore/jaxrs/src/main/webapp/WEB-INF/web.xml @@ -34,14 +34,14 @@ swagger.api.basepath - http://localhost:8080 + http://petstore.swagger.io/v2 2 jersey - /* + /v2/* ApiOriginFilter diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiClient.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiClient.java deleted file mode 100644 index 9af0c10b543..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiClient.java +++ /dev/null @@ -1,553 +0,0 @@ -package io.swagger.client; - -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.config.ClientConfig; -import com.sun.jersey.api.client.config.DefaultClientConfig; -import com.sun.jersey.api.client.filter.LoggingFilter; -import com.sun.jersey.api.client.WebResource.Builder; - -import com.sun.jersey.multipart.FormDataMultiPart; -import com.sun.jersey.multipart.file.FileDataBodyPart; - -import javax.ws.rs.core.Response.Status.Family; -import javax.ws.rs.core.MediaType; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Map.Entry; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import java.util.Date; -import java.util.TimeZone; - -import java.net.URLEncoder; - -import java.io.IOException; -import java.io.File; -import java.io.UnsupportedEncodingException; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.text.ParseException; - -import io.swagger.client.auth.Authentication; -import io.swagger.client.auth.HttpBasicAuth; -import io.swagger.client.auth.ApiKeyAuth; -import io.swagger.client.auth.OAuth; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class ApiClient { - private Map hostMap = new HashMap(); - private Map defaultHeaderMap = new HashMap(); - private boolean debugging = false; - private String basePath = "http://petstore.swagger.io/v2"; - private JSON json = new JSON(); - - private Map authentications; - - private DateFormat dateFormat; - - public ApiClient() { - // Use ISO 8601 format for date and datetime. - // See https://en.wikipedia.org/wiki/ISO_8601 - this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); - - // Use UTC as the default time zone. - this.dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - - // Set default User-Agent. - setUserAgent("Java-Swagger"); - - // Setup authentications (key: authentication name, value: authentication). - authentications = new HashMap(); - authentications.put("api_key", new ApiKeyAuth("header", "api_key")); - authentications.put("petstore_auth", new OAuth()); - // Prevent the authentications from being modified. - authentications = Collections.unmodifiableMap(authentications); - } - - public String getBasePath() { - return basePath; - } - - public ApiClient setBasePath(String basePath) { - this.basePath = basePath; - return this; - } - - /** - * Get authentications (key: authentication name, value: authentication). - */ - public Map getAuthentications() { - return authentications; - } - - /** - * Get authentication for the given name. - * - * @param authName The authentication name - * @return The authentication, null if not found - */ - public Authentication getAuthentication(String authName) { - return authentications.get(authName); - } - - /** - * Helper method to set username for the first HTTP basic authentication. - */ - public void setUsername(String username) { - for (Authentication auth : authentications.values()) { - if (auth instanceof HttpBasicAuth) { - ((HttpBasicAuth) auth).setUsername(username); - return; - } - } - throw new RuntimeException("No HTTP basic authentication configured!"); - } - - /** - * Helper method to set password for the first HTTP basic authentication. - */ - public void setPassword(String password) { - for (Authentication auth : authentications.values()) { - if (auth instanceof HttpBasicAuth) { - ((HttpBasicAuth) auth).setPassword(password); - return; - } - } - throw new RuntimeException("No HTTP basic authentication configured!"); - } - - /** - * Helper method to set API key value for the first API key authentication. - */ - public void setApiKey(String apiKey) { - for (Authentication auth : authentications.values()) { - if (auth instanceof ApiKeyAuth) { - ((ApiKeyAuth) auth).setApiKey(apiKey); - return; - } - } - throw new RuntimeException("No API key authentication configured!"); - } - - /** - * Helper method to set API key prefix for the first API key authentication. - */ - public void setApiKeyPrefix(String apiKeyPrefix) { - for (Authentication auth : authentications.values()) { - if (auth instanceof ApiKeyAuth) { - ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); - return; - } - } - throw new RuntimeException("No API key authentication configured!"); - } - - /** - * Set the User-Agent header's value (by adding to the default header map). - */ - public ApiClient setUserAgent(String userAgent) { - addDefaultHeader("User-Agent", userAgent); - return this; - } - - /** - * Add a default header. - * - * @param key The header's key - * @param value The header's value - */ - public ApiClient addDefaultHeader(String key, String value) { - defaultHeaderMap.put(key, value); - return this; - } - - /** - * Check that whether debugging is enabled for this API client. - */ - public boolean isDebugging() { - return debugging; - } - - /** - * Enable/disable debugging for this API client. - * - * @param debugging To enable (true) or disable (false) debugging - */ - public ApiClient setDebugging(boolean debugging) { - this.debugging = debugging; - return this; - } - - /** - * Get the date format used to parse/format date parameters. - */ - public DateFormat getDateFormat() { - return dateFormat; - } - - /** - * Set the date format used to parse/format date parameters. - */ - public ApiClient getDateFormat(DateFormat dateFormat) { - this.dateFormat = dateFormat; - return this; - } - - /** - * Parse the given string into Date object. - */ - public Date parseDate(String str) { - try { - return dateFormat.parse(str); - } catch (java.text.ParseException e) { - throw new RuntimeException(e); - } - } - - /** - * Format the given Date object into string. - */ - public String formatDate(Date date) { - return dateFormat.format(date); - } - - /** - * Format the given parameter object into string. - */ - public String parameterToString(Object param) { - if (param == null) { - return ""; - } else if (param instanceof Date) { - return formatDate((Date) param); - } else if (param instanceof Collection) { - StringBuilder b = new StringBuilder(); - for(Object o : (Collection)param) { - if(b.length() > 0) { - b.append(","); - } - b.append(String.valueOf(o)); - } - return b.toString(); - } else { - return String.valueOf(param); - } - } - - /* - Format to {@code Pair} objects. - */ - public List parameterToPairs(String collectionFormat, String name, Object value){ - List params = new ArrayList(); - - // preconditions - if (name == null || name.isEmpty() || value == null) return params; - - Collection valueCollection = null; - if (value instanceof Collection) { - valueCollection = (Collection) value; - } else { - params.add(new Pair(name, parameterToString(value))); - return params; - } - - if (valueCollection.isEmpty()){ - return params; - } - - // get the collection format - collectionFormat = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat); // default: csv - - // create the params based on the collection format - if (collectionFormat.equals("multi")) { - for (Object item : valueCollection) { - params.add(new Pair(name, parameterToString(item))); - } - - return params; - } - - String delimiter = ","; - - if (collectionFormat.equals("csv")) { - delimiter = ","; - } else if (collectionFormat.equals("ssv")) { - delimiter = " "; - } else if (collectionFormat.equals("tsv")) { - delimiter = "\t"; - } else if (collectionFormat.equals("pipes")) { - delimiter = "|"; - } - - StringBuilder sb = new StringBuilder() ; - for (Object item : valueCollection) { - sb.append(delimiter); - sb.append(parameterToString(item)); - } - - params.add(new Pair(name, sb.substring(1))); - - return params; - } - - /** - * Select the Accept header's value from the given accepts array: - * if JSON exists in the given array, use it; - * otherwise use all of them (joining into a string) - * - * @param accepts The accepts array to select from - * @return The Accept header to use. If the given array is empty, - * null will be returned (not to set the Accept header explicitly). - */ - public String selectHeaderAccept(String[] accepts) { - if (accepts.length == 0) return null; - if (StringUtil.containsIgnoreCase(accepts, "application/json")) return "application/json"; - return StringUtil.join(accepts, ","); - } - - /** - * Select the Content-Type header's value from the given array: - * if JSON exists in the given array, use it; - * otherwise use the first one of the array. - * - * @param contentTypes The Content-Type array to select from - * @return The Content-Type header to use. If the given array is empty, - * JSON will be used. - */ - public String selectHeaderContentType(String[] contentTypes) { - if (contentTypes.length == 0) return "application/json"; - if (StringUtil.containsIgnoreCase(contentTypes, "application/json")) return "application/json"; - return contentTypes[0]; - } - - /** - * Escape the given string to be used as URL query value. - */ - public String escapeString(String str) { - try { - return URLEncoder.encode(str, "utf8").replaceAll("\\+", "%20"); - } catch (UnsupportedEncodingException e) { - return str; - } - } - - /** - * Serialize the given Java object into string according the given - * Content-Type (only JSON is supported for now). - */ - public String serialize(Object obj, String contentType) throws ApiException { - if (contentType.startsWith("application/json")) { - return json.serialize(obj); - } else { - throw new ApiException(400, "can not serialize object into Content-Type: " + contentType); - } - } - - /** - * Deserialize response body to Java object according to the Content-Type. - */ - public T deserialize(ClientResponse response, TypeRef returnType) throws ApiException { - String contentType = null; - List contentTypes = response.getHeaders().get("Content-Type"); - if (contentTypes != null && !contentTypes.isEmpty()) - contentType = contentTypes.get(0); - if (contentType == null) - throw new ApiException(500, "missing Content-Type in response"); - - String body; - if (response.hasEntity()) - body = (String) response.getEntity(String.class); - else - body = ""; - - if (contentType.startsWith("application/json")) { - return json.deserialize(body, returnType); - } else { - throw new ApiException(500, "can not deserialize Content-Type: " + contentType); - } - } - - /** - * Invoke API by sending HTTP request with the given options. - * - * @param path The sub-path of the HTTP URL - * @param method The request method, one of "GET", "POST", "PUT", and "DELETE" - * @param queryParams The query parameters - * @param body The request body object - * @param headerParams The header parameters - * @param formParams The form parameters - * @param accept The request's Accept header - * @param contentType The request's Content-Type header - * @param authNames The authentications to apply - * @param returnType The return type into which to deserialize the response - * @return The response body in type of string - */ - public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, TypeRef returnType) throws ApiException { - updateParamsForAuth(authNames, queryParams, headerParams); - - Client client = getClient(); - - StringBuilder b = new StringBuilder(); - b.append("?"); - if (queryParams != null){ - for (Pair queryParam : queryParams){ - if (!queryParam.getName().isEmpty()) { - b.append(escapeString(queryParam.getName())); - b.append("="); - b.append(escapeString(queryParam.getValue())); - b.append("&"); - } - } - } - - String querystring = b.substring(0, b.length() - 1); - - Builder builder; - if (accept == null) - builder = client.resource(basePath + path + querystring).getRequestBuilder(); - else - builder = client.resource(basePath + path + querystring).accept(accept); - - for (String key : headerParams.keySet()) { - builder = builder.header(key, headerParams.get(key)); - } - for (String key : defaultHeaderMap.keySet()) { - if (!headerParams.containsKey(key)) { - builder = builder.header(key, defaultHeaderMap.get(key)); - } - } - - String encodedFormParams = null; - if (contentType.startsWith("multipart/form-data")) { - FormDataMultiPart mp = new FormDataMultiPart(); - for (Entry param: formParams.entrySet()) { - if (param.getValue() instanceof File) { - File file = (File) param.getValue(); - mp.field(param.getKey(), file.getName()); - mp.bodyPart(new FileDataBodyPart(param.getKey(), file, MediaType.MULTIPART_FORM_DATA_TYPE)); - } else { - mp.field(param.getKey(), parameterToString(param.getValue()), MediaType.MULTIPART_FORM_DATA_TYPE); - } - } - body = mp; - } else if (contentType.startsWith("application/x-www-form-urlencoded")) { - encodedFormParams = this.getXWWWFormUrlencodedParams(formParams); - } - - ClientResponse response = null; - - if ("GET".equals(method)) { - response = (ClientResponse) builder.get(ClientResponse.class); - } else if ("POST".equals(method)) { - if (encodedFormParams != null) { - response = builder.type(contentType).post(ClientResponse.class, encodedFormParams); - } else if (body == null) { - response = builder.post(ClientResponse.class, null); - } else if (body instanceof FormDataMultiPart) { - response = builder.type(contentType).post(ClientResponse.class, body); - } else { - response = builder.type(contentType).post(ClientResponse.class, serialize(body, contentType)); - } - } else if ("PUT".equals(method)) { - if (encodedFormParams != null) { - response = builder.type(contentType).put(ClientResponse.class, encodedFormParams); - } else if(body == null) { - response = builder.put(ClientResponse.class, serialize(body, contentType)); - } else { - response = builder.type(contentType).put(ClientResponse.class, serialize(body, contentType)); - } - } else if ("DELETE".equals(method)) { - if (encodedFormParams != null) { - response = builder.type(contentType).delete(ClientResponse.class, encodedFormParams); - } else if(body == null) { - response = builder.delete(ClientResponse.class); - } else { - response = builder.type(contentType).delete(ClientResponse.class, serialize(body, contentType)); - } - } else { - throw new ApiException(500, "unknown method type " + method); - } - - if (response.getStatusInfo() == ClientResponse.Status.NO_CONTENT) { - return null; - } else if (response.getStatusInfo().getFamily() == Family.SUCCESSFUL) { - if (returnType == null) - return null; - else - return deserialize(response, returnType); - } else { - String message = "error"; - String respBody = null; - if (response.hasEntity()) { - try { - respBody = String.valueOf(response.getEntity(String.class)); - message = respBody; - } catch (RuntimeException e) { - // e.printStackTrace(); - } - } - throw new ApiException( - response.getStatusInfo().getStatusCode(), - message, - response.getHeaders(), - respBody); - } - } - - /** - * Update query and header parameters based on authentication settings. - * - * @param authNames The authentications to apply - */ - private void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams) { - for (String authName : authNames) { - Authentication auth = authentications.get(authName); - if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); - auth.applyToParams(queryParams, headerParams); - } - } - - /** - * Encode the given form parameters as request body. - */ - private String getXWWWFormUrlencodedParams(Map formParams) { - StringBuilder formParamBuilder = new StringBuilder(); - - for (Entry param : formParams.entrySet()) { - String keyStr = param.getKey(); - String valueStr = parameterToString(param.getValue()); - try { - formParamBuilder.append(URLEncoder.encode(param.getKey(), "utf8")) - .append("=") - .append(URLEncoder.encode(valueStr, "utf8")); - formParamBuilder.append("&"); - } catch (UnsupportedEncodingException e) { - // move on to next - } - } - - String encodedFormParams = formParamBuilder.toString(); - if (encodedFormParams.endsWith("&")) { - encodedFormParams = encodedFormParams.substring(0, encodedFormParams.length() - 1); - } - - return encodedFormParams; - } - - /** - * Get an existing client or create a new client to handle HTTP request. - */ - private Client getClient() { - if(!hostMap.containsKey(basePath)) { - Client client = Client.create(); - if (debugging) - client.addFilter(new LoggingFilter()); - hostMap.put(basePath, client); - } - return hostMap.get(basePath); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiException.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiException.java deleted file mode 100644 index 605f8c3769d..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/ApiException.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.swagger.client; - -import java.util.Map; -import java.util.List; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class ApiException extends Exception { - private int code = 0; - private String message = null; - private Map> responseHeaders = null; - private String responseBody = null; - - public ApiException() {} - - public ApiException(int code, String message) { - this.code = code; - this.message = message; - } - - public ApiException(int code, String message, Map> responseHeaders, String responseBody) { - this.code = code; - this.message = message; - this.responseHeaders = responseHeaders; - this.responseBody = responseBody; - } - - public int getCode() { - return code; - } - - public String getMessage() { - return message; - } - - /** - * Get the HTTP response headers. - */ - public Map> getResponseHeaders() { - return responseHeaders; - } - - /** - * Get the HTTP response body. - */ - public String getResponseBody() { - return responseBody; - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Configuration.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Configuration.java deleted file mode 100644 index 524006fd7bd..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Configuration.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.swagger.client; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class Configuration { - private static ApiClient defaultApiClient = new ApiClient(); - - /** - * Get the default API client, which would be used when creating API - * instances without providing an API client. - */ - public static ApiClient getDefaultApiClient() { - return defaultApiClient; - } - - /** - * Set the default API client, which would be used when creating API - * instances without providing an API client. - */ - public static void setDefaultApiClient(ApiClient apiClient) { - defaultApiClient = apiClient; - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/JSON.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/JSON.java deleted file mode 100644 index 3514e41778e..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/JSON.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.swagger.client; - -import com.fasterxml.jackson.annotation.*; -import com.fasterxml.jackson.databind.*; -import com.fasterxml.jackson.datatype.joda.*; - -import java.io.IOException; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class JSON { - private ObjectMapper mapper; - - public JSON() { - mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - mapper.registerModule(new JodaModule()); - } - - /** - * Serialize the given Java object into JSON string. - */ - public String serialize(Object obj) throws ApiException { - try { - if (obj != null) - return mapper.writeValueAsString(obj); - else - return null; - } catch (Exception e) { - throw new ApiException(400, e.getMessage()); - } - } - - /** - * Deserialize the given JSON string to Java object. - * - * @param body The JSON string - * @param returnType The type to deserialize inot - * @return The deserialized Java object - */ - public T deserialize(String body, TypeRef returnType) throws ApiException { - JavaType javaType = mapper.constructType(returnType.getType()); - try { - return mapper.readValue(body, javaType); - } catch (IOException e) { - if (returnType.getType().equals(String.class)) - return (T) body; - else - throw new ApiException(500, e.getMessage(), null, body); - } - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Pair.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Pair.java deleted file mode 100644 index e7dd3350637..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/Pair.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.swagger.client; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class Pair { - private String name = ""; - private String value = ""; - - public Pair (String name, String value) { - setName(name); - setValue(value); - } - - private void setName(String name) { - if (!isValidString(name)) return; - - this.name = name; - } - - private void setValue(String value) { - if (!isValidString(value)) return; - - this.value = value; - } - - public String getName() { - return this.name; - } - - public String getValue() { - return this.value; - } - - private boolean isValidString(String arg) { - if (arg == null) return false; - if (arg.trim().isEmpty()) return false; - - return true; - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/StringUtil.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/StringUtil.java deleted file mode 100644 index c80bc8a1647..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/StringUtil.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.swagger.client; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class StringUtil { - /** - * Check if the given array contains the given value (with case-insensitive comparison). - * - * @param array The array - * @param value The value to search - * @return true if the array contains the value - */ - public static boolean containsIgnoreCase(String[] array, String value) { - for (String str : array) { - if (value == null && str == null) return true; - if (value != null && value.equalsIgnoreCase(str)) return true; - } - return false; - } - - /** - * Join an array of strings with the given separator. - *

- * Note: This might be replaced by utility method from commons-lang or guava someday - * if one of those libraries is added as dependency. - *

- * - * @param array The array of strings - * @param separator The separator - * @return the resulting string - */ - public static String join(String[] array, String separator) { - int len = array.length; - if (len == 0) return ""; - - StringBuilder out = new StringBuilder(); - out.append(array[0]); - for (int i = 1; i < len; i++) { - out.append(separator).append(array[i]); - } - return out.toString(); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/TypeRef.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/TypeRef.java deleted file mode 100644 index 15eb3ea05ba..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/TypeRef.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.swagger.client; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class TypeRef { - private final Type type; - - public TypeRef() { - this.type = getGenericType(getClass()); - } - - private static Type getGenericType(Class klass) { - Type superclass = klass.getGenericSuperclass(); - if (superclass instanceof Class) { - throw new RuntimeException("No type parameter provided"); - } - ParameterizedType parameterized = (ParameterizedType) superclass; - return parameterized.getActualTypeArguments()[0]; - } - - public Type getType() { - return type; - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/PetApi.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/PetApi.java deleted file mode 100644 index 5b71f7c199c..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/PetApi.java +++ /dev/null @@ -1,407 +0,0 @@ -package io.swagger.client.api; - -import io.swagger.client.ApiException; -import io.swagger.client.ApiClient; -import io.swagger.client.Configuration; -import io.swagger.client.Pair; -import io.swagger.client.TypeRef; - -import io.swagger.client.model.*; - -import java.util.*; - -import io.swagger.client.model.Pet; -import java.io.File; - -import java.io.File; -import java.util.Map; -import java.util.HashMap; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class PetApi { - private ApiClient apiClient; - - public PetApi() { - this(Configuration.getDefaultApiClient()); - } - - public PetApi(ApiClient apiClient) { - this.apiClient = apiClient; - } - - public ApiClient getApiClient() { - return apiClient; - } - - public void setApiClient(ApiClient apiClient) { - this.apiClient = apiClient; - } - - - /** - * Update an existing pet - * - * @param body Pet object that needs to be added to the store - * @return void - */ - public void updatePet (Pet body) throws ApiException { - Object postBody = body; - - - // create path and map variables - String path = "/pet".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - "application/json", "application/xml" - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - apiClient.invokeAPI(path, "PUT", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Add a new pet to the store - * - * @param body Pet object that needs to be added to the store - * @return void - */ - public void addPet (Pet body) throws ApiException { - Object postBody = body; - - - // create path and map variables - String path = "/pet".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - "application/json", "application/xml" - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Finds Pets by status - * Multiple status values can be provided with comma seperated strings - * @param status Status values that need to be considered for filter - * @return List - */ - public List findPetsByStatus (List status) throws ApiException { - Object postBody = null; - - - // create path and map variables - String path = "/pet/findByStatus".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - queryParams.addAll(apiClient.parameterToPairs("multi", "status", status)); - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - TypeRef returnType = new TypeRef>() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Finds Pets by tags - * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - * @param tags Tags to filter by - * @return List - */ - public List findPetsByTags (List tags) throws ApiException { - Object postBody = null; - - - // create path and map variables - String path = "/pet/findByTags".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - queryParams.addAll(apiClient.parameterToPairs("multi", "tags", tags)); - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - TypeRef returnType = new TypeRef>() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Find pet by ID - * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - * @param petId ID of pet that needs to be fetched - * @return Pet - */ - public Pet getPetById (Long petId) throws ApiException { - Object postBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetById"); - } - - - // create path and map variables - String path = "/pet/{petId}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "api_key", "petstore_auth" }; - - TypeRef returnType = new TypeRef() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Updates a pet in the store with form data - * - * @param petId ID of pet that needs to be updated - * @param name Updated name of the pet - * @param status Updated status of the pet - * @return void - */ - public void updatePetWithForm (String petId, String name, String status) throws ApiException { - Object postBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - throw new ApiException(400, "Missing the required parameter 'petId' when calling updatePetWithForm"); - } - - - // create path and map variables - String path = "/pet/{petId}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - if (name != null) - formParams.put("name", name); - if (status != null) - formParams.put("status", status); - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - "application/x-www-form-urlencoded" - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Deletes a pet - * - * @param petId Pet id to delete - * @param apiKey - * @return void - */ - public void deletePet (Long petId, String apiKey) throws ApiException { - Object postBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - throw new ApiException(400, "Missing the required parameter 'petId' when calling deletePet"); - } - - - // create path and map variables - String path = "/pet/{petId}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - if (apiKey != null) - headerParams.put("api_key", apiClient.parameterToString(apiKey)); - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - apiClient.invokeAPI(path, "DELETE", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * uploads an image - * - * @param petId ID of pet to update - * @param additionalMetadata Additional data to pass to server - * @param file file to upload - * @return void - */ - public void uploadFile (Long petId, String additionalMetadata, File file) throws ApiException { - Object postBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - throw new ApiException(400, "Missing the required parameter 'petId' when calling uploadFile"); - } - - - // create path and map variables - String path = "/pet/{petId}/uploadImage".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - if (additionalMetadata != null) - formParams.put("additionalMetadata", additionalMetadata); - if (file != null) - formParams.put("file", file); - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - "multipart/form-data" - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "petstore_auth" }; - - apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/StoreApi.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/StoreApi.java deleted file mode 100644 index 7c0430b5f71..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/StoreApi.java +++ /dev/null @@ -1,215 +0,0 @@ -package io.swagger.client.api; - -import io.swagger.client.ApiException; -import io.swagger.client.ApiClient; -import io.swagger.client.Configuration; -import io.swagger.client.Pair; -import io.swagger.client.TypeRef; - -import io.swagger.client.model.*; - -import java.util.*; - -import java.util.Map; -import io.swagger.client.model.Order; - -import java.io.File; -import java.util.Map; -import java.util.HashMap; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class StoreApi { - private ApiClient apiClient; - - public StoreApi() { - this(Configuration.getDefaultApiClient()); - } - - public StoreApi(ApiClient apiClient) { - this.apiClient = apiClient; - } - - public ApiClient getApiClient() { - return apiClient; - } - - public void setApiClient(ApiClient apiClient) { - this.apiClient = apiClient; - } - - - /** - * Returns pet inventories by status - * Returns a map of status codes to quantities - * @return Map - */ - public Map getInventory () throws ApiException { - Object postBody = null; - - - // create path and map variables - String path = "/store/inventory".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { "api_key" }; - - TypeRef returnType = new TypeRef>() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Place an order for a pet - * - * @param body order placed for purchasing the pet - * @return Order - */ - public Order placeOrder (Order body) throws ApiException { - Object postBody = body; - - - // create path and map variables - String path = "/store/order".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - TypeRef returnType = new TypeRef() {}; - return apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Find purchase order by ID - * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * @param orderId ID of pet that needs to be fetched - * @return Order - */ - public Order getOrderById (String orderId) throws ApiException { - Object postBody = null; - - // verify the required parameter 'orderId' is set - if (orderId == null) { - throw new ApiException(400, "Missing the required parameter 'orderId' when calling getOrderById"); - } - - - // create path and map variables - String path = "/store/order/{orderId}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "orderId" + "\\}", apiClient.escapeString(orderId.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - TypeRef returnType = new TypeRef() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Delete purchase order by ID - * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * @param orderId ID of the order that needs to be deleted - * @return void - */ - public void deleteOrder (String orderId) throws ApiException { - Object postBody = null; - - // verify the required parameter 'orderId' is set - if (orderId == null) { - throw new ApiException(400, "Missing the required parameter 'orderId' when calling deleteOrder"); - } - - - // create path and map variables - String path = "/store/order/{orderId}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "orderId" + "\\}", apiClient.escapeString(orderId.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "DELETE", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/UserApi.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/UserApi.java deleted file mode 100644 index a11ac7d16ed..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/api/UserApi.java +++ /dev/null @@ -1,386 +0,0 @@ -package io.swagger.client.api; - -import io.swagger.client.ApiException; -import io.swagger.client.ApiClient; -import io.swagger.client.Configuration; -import io.swagger.client.Pair; -import io.swagger.client.TypeRef; - -import io.swagger.client.model.*; - -import java.util.*; - -import io.swagger.client.model.User; -import java.util.*; - -import java.io.File; -import java.util.Map; -import java.util.HashMap; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class UserApi { - private ApiClient apiClient; - - public UserApi() { - this(Configuration.getDefaultApiClient()); - } - - public UserApi(ApiClient apiClient) { - this.apiClient = apiClient; - } - - public ApiClient getApiClient() { - return apiClient; - } - - public void setApiClient(ApiClient apiClient) { - this.apiClient = apiClient; - } - - - /** - * Create user - * This can only be done by the logged in user. - * @param body Created user object - * @return void - */ - public void createUser (User body) throws ApiException { - Object postBody = body; - - - // create path and map variables - String path = "/user".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Creates list of users with given input array - * - * @param body List of user object - * @return void - */ - public void createUsersWithArrayInput (List body) throws ApiException { - Object postBody = body; - - - // create path and map variables - String path = "/user/createWithArray".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Creates list of users with given input array - * - * @param body List of user object - * @return void - */ - public void createUsersWithListInput (List body) throws ApiException { - Object postBody = body; - - - // create path and map variables - String path = "/user/createWithList".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Logs user into the system - * - * @param username The user name for login - * @param password The password for login in clear text - * @return String - */ - public String loginUser (String username, String password) throws ApiException { - Object postBody = null; - - - // create path and map variables - String path = "/user/login".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - queryParams.addAll(apiClient.parameterToPairs("", "username", username)); - - queryParams.addAll(apiClient.parameterToPairs("", "password", password)); - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - TypeRef returnType = new TypeRef() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Logs out current logged in user session - * - * @return void - */ - public void logoutUser () throws ApiException { - Object postBody = null; - - - // create path and map variables - String path = "/user/logout".replaceAll("\\{format\\}","json"); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Get user by user name - * - * @param username The name that needs to be fetched. Use user1 for testing. - * @return User - */ - public User getUserByName (String username) throws ApiException { - Object postBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - throw new ApiException(400, "Missing the required parameter 'username' when calling getUserByName"); - } - - - // create path and map variables - String path = "/user/{username}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "username" + "\\}", apiClient.escapeString(username.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - TypeRef returnType = new TypeRef() {}; - return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); - - } - - /** - * Updated user - * This can only be done by the logged in user. - * @param username name that need to be deleted - * @param body Updated user object - * @return void - */ - public void updateUser (String username, User body) throws ApiException { - Object postBody = body; - - // verify the required parameter 'username' is set - if (username == null) { - throw new ApiException(400, "Missing the required parameter 'username' when calling updateUser"); - } - - - // create path and map variables - String path = "/user/{username}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "username" + "\\}", apiClient.escapeString(username.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "PUT", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - - /** - * Delete user - * This can only be done by the logged in user. - * @param username The name that needs to be deleted - * @return void - */ - public void deleteUser (String username) throws ApiException { - Object postBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - throw new ApiException(400, "Missing the required parameter 'username' when calling deleteUser"); - } - - - // create path and map variables - String path = "/user/{username}".replaceAll("\\{format\\}","json") - .replaceAll("\\{" + "username" + "\\}", apiClient.escapeString(username.toString())); - - // query params - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - - - - - - - final String[] accepts = { - "application/json", "application/xml" - }; - final String accept = apiClient.selectHeaderAccept(accepts); - - final String[] contentTypes = { - - }; - final String contentType = apiClient.selectHeaderContentType(contentTypes); - - String[] authNames = new String[] { }; - - apiClient.invokeAPI(path, "DELETE", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); - - } - -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/ApiKeyAuth.java deleted file mode 100644 index 41094d08440..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/ApiKeyAuth.java +++ /dev/null @@ -1,59 +0,0 @@ -package io.swagger.client.auth; - -import io.swagger.client.Pair; - -import java.util.Map; -import java.util.List; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class ApiKeyAuth implements Authentication { - private final String location; - private final String paramName; - - private String apiKey; - private String apiKeyPrefix; - - public ApiKeyAuth(String location, String paramName) { - this.location = location; - this.paramName = paramName; - } - - public String getLocation() { - return location; - } - - public String getParamName() { - return paramName; - } - - public String getApiKey() { - return apiKey; - } - - public void setApiKey(String apiKey) { - this.apiKey = apiKey; - } - - public String getApiKeyPrefix() { - return apiKeyPrefix; - } - - public void setApiKeyPrefix(String apiKeyPrefix) { - this.apiKeyPrefix = apiKeyPrefix; - } - - @Override - public void applyToParams(List queryParams, Map headerParams) { - String value; - if (apiKeyPrefix != null) { - value = apiKeyPrefix + " " + apiKey; - } else { - value = apiKey; - } - if (location == "query") { - queryParams.add(new Pair(paramName, value)); - } else if (location == "header") { - headerParams.put(paramName, value); - } - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/Authentication.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/Authentication.java deleted file mode 100644 index 5585eecdf1e..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/Authentication.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.swagger.client.auth; - -import io.swagger.client.Pair; - -import java.util.Map; -import java.util.List; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public interface Authentication { - /** Apply authentication settings to header and query params. */ - void applyToParams(List queryParams, Map headerParams); -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/HttpBasicAuth.java deleted file mode 100644 index 740d8993862..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/HttpBasicAuth.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.swagger.client.auth; - -import io.swagger.client.Pair; - -import java.util.Map; -import java.util.List; - -import java.io.UnsupportedEncodingException; -import javax.xml.bind.DatatypeConverter; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class HttpBasicAuth implements Authentication { - private String username; - private String password; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - @Override - public void applyToParams(List queryParams, Map headerParams) { - String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); - try { - headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/OAuth.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/OAuth.java deleted file mode 100644 index b592d67848f..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/auth/OAuth.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.swagger.client.auth; - -import io.swagger.client.Pair; - -import java.util.Map; -import java.util.List; - -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class OAuth implements Authentication { - @Override - public void applyToParams(List queryParams, Map headerParams) { - // TODO: support oauth - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Category.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Category.java deleted file mode 100644 index 0d1945b5804..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Category.java +++ /dev/null @@ -1,53 +0,0 @@ -package io.swagger.client.model; - - - - -import io.swagger.annotations.*; -import com.fasterxml.jackson.annotation.JsonProperty; - - -@ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class Category { - - private Long id = null; - private String name = null; - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("id") - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("name") - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class Category {\n"); - - sb.append(" id: ").append(id).append("\n"); - sb.append(" name: ").append(name).append("\n"); - sb.append("}\n"); - return sb.toString(); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Order.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Order.java deleted file mode 100644 index 2a3892f2918..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Order.java +++ /dev/null @@ -1,114 +0,0 @@ -package io.swagger.client.model; - -import java.util.Date; - - - -import io.swagger.annotations.*; -import com.fasterxml.jackson.annotation.JsonProperty; - - -@ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class Order { - - private Long id = null; - private Long petId = null; - private Integer quantity = null; - private Date shipDate = null; - public enum StatusEnum { - placed, approved, delivered, - }; - private StatusEnum status = null; - private Boolean complete = null; - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("id") - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("petId") - public Long getPetId() { - return petId; - } - public void setPetId(Long petId) { - this.petId = petId; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("quantity") - public Integer getQuantity() { - return quantity; - } - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("shipDate") - public Date getShipDate() { - return shipDate; - } - public void setShipDate(Date shipDate) { - this.shipDate = shipDate; - } - - - /** - * Order Status - **/ - @ApiModelProperty(value = "Order Status") - @JsonProperty("status") - public StatusEnum getStatus() { - return status; - } - public void setStatus(StatusEnum status) { - this.status = status; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("complete") - public Boolean getComplete() { - return complete; - } - public void setComplete(Boolean complete) { - this.complete = complete; - } - - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class Order {\n"); - - sb.append(" id: ").append(id).append("\n"); - sb.append(" petId: ").append(petId).append("\n"); - sb.append(" quantity: ").append(quantity).append("\n"); - sb.append(" shipDate: ").append(shipDate).append("\n"); - sb.append(" status: ").append(status).append("\n"); - sb.append(" complete: ").append(complete).append("\n"); - sb.append("}\n"); - return sb.toString(); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Pet.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Pet.java deleted file mode 100644 index 6cb7df1fde5..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Pet.java +++ /dev/null @@ -1,116 +0,0 @@ -package io.swagger.client.model; - -import io.swagger.client.model.Category; -import io.swagger.client.model.Tag; -import java.util.*; - - - -import io.swagger.annotations.*; -import com.fasterxml.jackson.annotation.JsonProperty; - - -@ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class Pet { - - private Long id = null; - private Category category = null; - private String name = null; - private List photoUrls = new ArrayList(); - private List tags = new ArrayList(); - public enum StatusEnum { - available, pending, sold, - }; - private StatusEnum status = null; - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("id") - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("category") - public Category getCategory() { - return category; - } - public void setCategory(Category category) { - this.category = category; - } - - - /** - **/ - @ApiModelProperty(required = true, value = "") - @JsonProperty("name") - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - - /** - **/ - @ApiModelProperty(required = true, value = "") - @JsonProperty("photoUrls") - public List getPhotoUrls() { - return photoUrls; - } - public void setPhotoUrls(List photoUrls) { - this.photoUrls = photoUrls; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("tags") - public List getTags() { - return tags; - } - public void setTags(List tags) { - this.tags = tags; - } - - - /** - * pet status in the store - **/ - @ApiModelProperty(value = "pet status in the store") - @JsonProperty("status") - public StatusEnum getStatus() { - return status; - } - public void setStatus(StatusEnum status) { - this.status = status; - } - - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class Pet {\n"); - - sb.append(" id: ").append(id).append("\n"); - sb.append(" category: ").append(category).append("\n"); - sb.append(" name: ").append(name).append("\n"); - sb.append(" photoUrls: ").append(photoUrls).append("\n"); - sb.append(" tags: ").append(tags).append("\n"); - sb.append(" status: ").append(status).append("\n"); - sb.append("}\n"); - return sb.toString(); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Tag.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Tag.java deleted file mode 100644 index fe212ea8ab6..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/Tag.java +++ /dev/null @@ -1,53 +0,0 @@ -package io.swagger.client.model; - - - - -import io.swagger.annotations.*; -import com.fasterxml.jackson.annotation.JsonProperty; - - -@ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class Tag { - - private Long id = null; - private String name = null; - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("id") - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("name") - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class Tag {\n"); - - sb.append(" id: ").append(id).append("\n"); - sb.append(" name: ").append(name).append("\n"); - sb.append("}\n"); - return sb.toString(); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/User.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/User.java deleted file mode 100644 index 5b9230b8e01..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/client/model/User.java +++ /dev/null @@ -1,138 +0,0 @@ -package io.swagger.client.model; - - - - -import io.swagger.annotations.*; -import com.fasterxml.jackson.annotation.JsonProperty; - - -@ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-08-23T11:08:48.917-07:00") -public class User { - - private Long id = null; - private String username = null; - private String firstName = null; - private String lastName = null; - private String email = null; - private String password = null; - private String phone = null; - private Integer userStatus = null; - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("id") - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("username") - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("firstName") - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("lastName") - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { - this.lastName = lastName; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("email") - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("password") - public String getPassword() { - return password; - } - public void setPassword(String password) { - this.password = password; - } - - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("phone") - public String getPhone() { - return phone; - } - public void setPhone(String phone) { - this.phone = phone; - } - - - /** - * User Status - **/ - @ApiModelProperty(value = "User Status") - @JsonProperty("userStatus") - public Integer getUserStatus() { - return userStatus; - } - public void setUserStatus(Integer userStatus) { - this.userStatus = userStatus; - } - - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class User {\n"); - - sb.append(" id: ").append(id).append("\n"); - sb.append(" username: ").append(username).append("\n"); - sb.append(" firstName: ").append(firstName).append("\n"); - sb.append(" lastName: ").append(lastName).append("\n"); - sb.append(" email: ").append(email).append("\n"); - sb.append(" password: ").append(password).append("\n"); - sb.append(" phone: ").append(phone).append("\n"); - sb.append(" userStatus: ").append(userStatus).append("\n"); - sb.append("}\n"); - return sb.toString(); - } -} diff --git a/samples/server/petstore/jaxrs/src/test/java/io/swagger/test/integration/ResourceListingTestIT.java b/samples/server/petstore/jaxrs/src/test/java/io/swagger/test/integration/ResourceListingTestIT.java deleted file mode 100644 index f2b6ffffa68..00000000000 --- a/samples/server/petstore/jaxrs/src/test/java/io/swagger/test/integration/ResourceListingTestIT.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2015 SmartBear Software - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.swagger.test.integration; - -import io.swagger.client.ApiClient; -import io.swagger.client.Pair; -import io.swagger.client.TypeRef; -import io.swagger.models.Operation; -import io.swagger.models.Response; -import io.swagger.models.Swagger; -import io.swagger.models.parameters.Parameter; -import io.swagger.models.properties.IntegerProperty; -import io.swagger.models.properties.MapProperty; -import io.swagger.models.properties.Property; -import io.swagger.util.Json; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import static org.testng.Assert.*; - -public class ResourceListingTestIT { - ApiClient client = new ApiClient(); - Swagger swagger = null; - - @BeforeClass - public void setup() throws Exception { - TypeRef ref = new TypeRef(){}; - List queryParams = new ArrayList(); - Map headerParams = new HashMap(); - Map formParams = new HashMap(); - - String str = client.invokeAPI("/swagger.json", "GET", queryParams, null, headerParams, formParams, "application/json", "", new String[0], ref); - swagger = Json.mapper().readValue(str, Swagger.class); - assertNotNull(swagger); - } - - @Test - public void verifyFileInput() throws Exception { - Operation op = swagger.getPath("/pet/{petId}/uploadImage").getPost(); - List parameters = op.getParameters(); - Parameter petId = parameters.get(0); - assertEquals(petId.getName(), "petId"); - assertEquals(petId.getIn(), "path"); - - Parameter additionalMetadata = parameters.get(1); - assertEquals(additionalMetadata.getName(), "additionalMetadata"); - assertEquals(additionalMetadata.getIn(), "formData"); - - Parameter file = parameters.get(2); - assertEquals(file.getName(), "file"); - assertEquals(file.getIn(), "formData"); - } - - @Test - public void verifyMapResponse() throws Exception { - Operation op = swagger.getPath("/store/inventory").getGet(); - Response response = op.getResponses().get("200"); - - Property property = response.getSchema(); - assertTrue(property instanceof MapProperty); - - MapProperty mp = (MapProperty) property; - assertTrue(mp.getAdditionalProperties() instanceof IntegerProperty); - } -} \ No newline at end of file From 5a8d2c834f0cdc952020a570b1391cd1ee8bca04 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 5 Nov 2015 16:49:38 +0800 Subject: [PATCH 20/30] add oauth support to csharp --- .../main/resources/csharp/ApiClient.mustache | 3 +-- .../resources/csharp/Configuration.mustache | 6 ++++++ .../csharp/IO/Swagger/Client/ApiClient.cs | 4 +--- .../csharp/IO/Swagger/Client/Configuration.cs | 6 ++++++ .../bin/Debug/SwaggerClientTest.dll | Bin 61952 -> 61952 bytes .../obj/Debug/SwaggerClientTest.dll | Bin 61952 -> 61952 bytes 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index f6dd2933331..883a635472d 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -319,8 +319,7 @@ namespace {{packageName}}.Client { {{#authMethods}} case "{{name}}": - {{#isApiKey}}{{#isKeyInHeader}}headerParams["{{keyParamName}}"] = GetApiKeyWithPrefix("{{keyParamName}}");{{/isKeyInHeader}}{{#isKeyInQuery}}queryParams["{{keyParamName}}"] = GetApiKeyWithPrefix("{{keyParamName}}");{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}headerParams["Authorization"] = "Basic " + Base64Encode(Configuration.Username + ":" + Configuration.Password);{{/isBasic}} - {{#isOAuth}}//TODO support oauth{{/isOAuth}} + {{#isApiKey}}{{#isKeyInHeader}}headerParams["{{keyParamName}}"] = GetApiKeyWithPrefix("{{keyParamName}}");{{/isKeyInHeader}}{{#isKeyInQuery}}queryParams["{{keyParamName}}"] = GetApiKeyWithPrefix("{{keyParamName}}");{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}headerParams["Authorization"] = "Basic " + Base64Encode(Configuration.Username + ":" + Configuration.Password);{{/isBasic}}{{#isOAuth}}headerParams["Authorization"] = "Bearer " + Configuration.AccessToken;{{/isOAuth}} break; {{/authMethods}} default: diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index 67b07069e2f..79b20c6062c 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -37,6 +37,12 @@ namespace {{packageName}}.Client /// The password. public static String Password { get; set; } + /// + /// Gets or sets the access token for OAuth2 authentication. + /// + /// The access token. + public static String AccessToken { get; set; } + /// /// Gets or sets the API key based on the authentication name. /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 0416f985360..049c1ef74d8 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -320,12 +320,10 @@ namespace IO.Swagger.Client case "api_key": headerParams["api_key"] = GetApiKeyWithPrefix("api_key"); - break; case "petstore_auth": - - //TODO support oauth + headerParams["Authorization"] = "Bearer " + Configuration.AccessToken; break; default: diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index 80df0f4ec72..4168d69a2ea 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -37,6 +37,12 @@ namespace IO.Swagger.Client /// The password. public static String Password { get; set; } + /// + /// Gets or sets the access token for OAuth2 authentication. + /// + /// The access token. + public static String AccessToken { get; set; } + /// /// Gets or sets the API key based on the authentication name. /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index 3541160c3b9ace66ad275322526c3a6d0c45eb8a..c292bea9bad1f0a11e25411e9c1f7c0c89c2a603 100755 GIT binary patch literal 61952 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Νe4KcHI526g>?-w%^U`N{zMLAjA+}I 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 Me^vqirw9K30Z{EVNdN!< diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll index 3541160c3b9ace66ad275322526c3a6d0c45eb8a..c292bea9bad1f0a11e25411e9c1f7c0c89c2a603 100755 GIT binary patch literal 61952 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Νe4KcHI526g>?-w%^U`N{zMLAjA+}I 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 Me^vqirw9K30Z{EVNdN!< From be0232fa3580a00c8a7d409d28948835c6e99730 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 5 Nov 2015 22:26:49 -0800 Subject: [PATCH 21/30] moved tags to extension to avoid path collisions #1518 --- .../codegen/languages/JaxRSServerCodegen.java | 54 +++++++++++++------ .../src/main/resources/JavaJaxRS/api.mustache | 7 ++- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index fd83e38896a..375f5d72bff 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -1,23 +1,12 @@ package io.swagger.codegen.languages; -import io.swagger.codegen.CodegenConfig; -import io.swagger.codegen.CodegenConstants; -import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.CodegenOperation; -import io.swagger.codegen.CodegenProperty; -import io.swagger.codegen.CodegenResponse; -import io.swagger.codegen.CodegenType; -import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.*; import io.swagger.models.Operation; -import io.swagger.models.properties.Property; -import io.swagger.models.properties.StringProperty; +import io.swagger.models.Path; +import io.swagger.models.Swagger; import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.*; public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConfig { protected String title = "Swagger Server"; @@ -118,6 +107,36 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf co.baseName = basePath; } + @Override + public void preprocessSwagger(Swagger swagger) { + if(swagger != null && swagger.getPaths() != null) { + for(String pathname : swagger.getPaths().keySet()) { + Path path = swagger.getPath(pathname); + if(path.getOperations() != null) { + for(Operation operation : path.getOperations()) { + if(operation.getTags() != null) { + List> tags = new ArrayList>(); + for(String tag : operation.getTags()) { + Map value = new HashMap(); + value.put("tag", tag); + value.put("hasMore", "true"); + tags.add(value); + } + if(tags.size() > 0) { + tags.get(tags.size() - 1).remove("hasMore"); + } + if(operation.getTags().size() > 0) { + String tag = operation.getTags().get(0); + operation.setTags(Arrays.asList(tag)); + } + operation.setVendorExtension("x-tags", tags); + } + } + } + } + } + } + @Override public Map postProcessModels(Map objs) { List models = (List) objs.get("models"); @@ -195,9 +214,10 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf result = result.substring(0, ix) + "/impl" + result.substring(ix, result.length() - 5) + "ServiceImpl.java"; String output = System.getProperty("swagger.codegen.jaxrs.impl.source"); - if (output != null) { - result = result.replace(apiFileFolder(), implFileFolder(output)); + if(output == null) { + output = "src" + File.separator + "main" + File.separator + "java"; } + result = result.replace(apiFileFolder(), implFileFolder(output)); } else if (templateName.endsWith("Factory.mustache")) { int ix = result.lastIndexOf('/'); result = result.substring(0, ix) + "/factories" + result.substring(ix, result.length() - 5) + "ServiceFactory.java"; diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache index e919fa7ce71..ea9f2518b01 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache @@ -22,14 +22,13 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("{{basePathWithoutHost}}/{{baseName}}") +@Path("/{{baseName}}") {{#hasConsumes}}@Consumes({ {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}} {{#hasProduces}}@Produces({ {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}} -@io.swagger.annotations.Api(value = "/{{baseName}}", description = "the {{baseName}} API") +@io.swagger.annotations.Api(description = "the {{baseName}} API") {{>generatedAnnotation}} {{#operations}} public class {{classname}} { - private final {{classname}}Service delegate = {{classname}}ServiceFactory.get{{classname}}(); {{#operation}} @@ -43,7 +42,7 @@ public class {{classname}} { {{/hasMore}}{{/scopes}} }{{/isOAuth}}){{#hasMore}}, {{/hasMore}}{{/authMethods}} - }{{/hasAuthMethods}}) + }{{/hasAuthMethods}}, tags={ {{#vendorExtensions.x-tags}}"{{tag}}"{{#hasMore}}, {{/hasMore}}{{/vendorExtensions.x-tags}} }) @io.swagger.annotations.ApiResponses(value = { {{#responses}} @io.swagger.annotations.ApiResponse(code = {{{code}}}, message = "{{{message}}}", response = {{{returnType}}}.class{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}){{#hasMore}}, {{/hasMore}}{{/responses}} }) From 40992c0a9bfacafb08a06414137f971033beaa14 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 5 Nov 2015 22:31:56 -0800 Subject: [PATCH 22/30] rebuilt --- .../gen/java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/gen/java/io/swagger/api/PetApi.java | 23 +++++++++---------- .../java/io/swagger/api/PetApiService.java | 2 +- .../src/gen/java/io/swagger/api/StoreApi.java | 15 ++++++------ .../java/io/swagger/api/StoreApiService.java | 2 +- .../src/gen/java/io/swagger/api/UserApi.java | 23 +++++++++---------- .../java/io/swagger/api/UserApiService.java | 2 +- .../gen/java/io/swagger/model/Category.java | 2 +- .../src/gen/java/io/swagger/model/Order.java | 2 +- .../src/gen/java/io/swagger/model/Pet.java | 2 +- .../src/gen/java/io/swagger/model/Tag.java | 2 +- .../src/gen/java/io/swagger/model/User.java | 2 +- .../api/factories/PetApiServiceFactory.java | 2 +- .../api/factories/StoreApiServiceFactory.java | 2 +- .../api/factories/UserApiServiceFactory.java | 2 +- .../swagger/api/impl/PetApiServiceImpl.java | 2 +- .../swagger/api/impl/StoreApiServiceImpl.java | 2 +- .../swagger/api/impl/UserApiServiceImpl.java | 2 +- 21 files changed, 47 insertions(+), 50 deletions(-) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java index 5fbf037b2ff..765ae959367 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java index 1c5dade251c..9559bd394aa 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java index 91264320d2c..2460847cf6a 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java index 7b5055536d2..58dc8bcd1ad 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java index d8918a855f9..e8db743f900 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -22,13 +22,12 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/v2/pet") +@Path("/pet") -@io.swagger.annotations.Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@io.swagger.annotations.Api(description = "the pet API") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class PetApi { - private final PetApiService delegate = PetApiServiceFactory.getPetApi(); @PUT @@ -40,7 +39,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), @@ -61,7 +60,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) @@ -78,7 +77,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"), @@ -97,7 +96,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"), @@ -113,7 +112,7 @@ public class PetApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class, authorizations = { @io.swagger.annotations.Authorization(value = "api_key") - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class), @@ -134,7 +133,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) @@ -153,7 +152,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value", response = Void.class) }) @@ -171,7 +170,7 @@ public class PetApi { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) - }) + }, tags={ "pet" }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java index edb656bba4b..b7e1ead74cc 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public abstract class PetApiService { public abstract Response updatePet(Pet body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java index c75b7c0b005..7c9b500470a 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -22,13 +22,12 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/v2/store") +@Path("/store") -@io.swagger.annotations.Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@io.swagger.annotations.Api(description = "the store API") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class StoreApi { - private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); @GET @@ -37,7 +36,7 @@ public class StoreApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = { @io.swagger.annotations.Authorization(value = "api_key") - }) + }, tags={ "store", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Integer.class, responseContainer = "Map") }) @@ -49,7 +48,7 @@ public class StoreApi { @Path("/order") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Place an order for a pet", notes = "", response = Order.class) + @io.swagger.annotations.ApiOperation(value = "Place an order for a pet", notes = "", response = Order.class, tags={ "store", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Order.class), @@ -63,7 +62,7 @@ public class StoreApi { @Path("/order/{orderId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) + @io.swagger.annotations.ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class, tags={ "store", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Order.class), @@ -79,7 +78,7 @@ public class StoreApi { @Path("/order/{orderId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class, tags={ "store" }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java index 20dd92d9cd9..721117cf3b3 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public abstract class StoreApiService { public abstract Response getInventory() diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java index 9a1b8187021..718fbbe9a9a 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -22,20 +22,19 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/v2/user") +@Path("/user") -@io.swagger.annotations.Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@io.swagger.annotations.Api(description = "the user API") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class UserApi { - private final UserApiService delegate = UserApiServiceFactory.getUserApi(); @POST @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Create user", notes = "This can only be done by the logged in user.", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Create user", notes = "This can only be done by the logged in user.", response = Void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) @@ -47,7 +46,7 @@ public class UserApi { @Path("/createWithArray") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) @@ -59,7 +58,7 @@ public class UserApi { @Path("/createWithList") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) @@ -71,7 +70,7 @@ public class UserApi { @Path("/login") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Logs user into the system", notes = "", response = String.class) + @io.swagger.annotations.ApiOperation(value = "Logs user into the system", notes = "", response = String.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = String.class), @@ -86,7 +85,7 @@ public class UserApi { @Path("/logout") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Logs out current logged in user session", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Logs out current logged in user session", notes = "", response = Void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) @@ -98,7 +97,7 @@ public class UserApi { @Path("/{username}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Get user by user name", notes = "", response = User.class) + @io.swagger.annotations.ApiOperation(value = "Get user by user name", notes = "", response = User.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = User.class), @@ -114,7 +113,7 @@ public class UserApi { @Path("/{username}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = Void.class), @@ -129,7 +128,7 @@ public class UserApi { @Path("/{username}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class, tags={ "user" }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = Void.class), diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java index efd8a3fe9a4..aebc957e25c 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public abstract class UserApiService { public abstract Response createUser(User body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java index e390c5b806c..0acf355555c 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java index 59c85b3d7d8..07b422a67f5 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java index f0d2790a8ac..af735dcc3b2 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java index 83434c8b812..1102fa408bf 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java index 6aa15fe86b4..d170b2c7df0 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:51:39.623-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class User { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java index 1110a6abad9..1096ef30806 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java @@ -3,7 +3,7 @@ package io.swagger.api.factories; import io.swagger.api.PetApiService; import io.swagger.api.impl.PetApiServiceImpl; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class PetApiServiceFactory { private final static PetApiService service = new PetApiServiceImpl(); diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java index cd3cd1fa9e2..2fb1234323a 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java @@ -3,7 +3,7 @@ package io.swagger.api.factories; import io.swagger.api.StoreApiService; import io.swagger.api.impl.StoreApiServiceImpl; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class StoreApiServiceFactory { private final static StoreApiService service = new StoreApiServiceImpl(); diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java index 2be6d83827a..4c654779ed9 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java @@ -3,7 +3,7 @@ package io.swagger.api.factories; import io.swagger.api.UserApiService; import io.swagger.api.impl.UserApiServiceImpl; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class UserApiServiceFactory { private final static UserApiService service = new UserApiServiceImpl(); diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java index 3432c17d0b0..5137ffe7912 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class PetApiServiceImpl extends PetApiService { @Override diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java index 96a7d50cd3a..4d9011b4943 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class StoreApiServiceImpl extends StoreApiService { @Override diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java index 1d5eeab2cd6..991849edc17 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T18:43:02.375-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-05T22:31:25.130-08:00") public class UserApiServiceImpl extends UserApiService { @Override From 8d3e555f8aa2dc05406e0efb981070faa746ed32 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 6 Nov 2015 17:15:32 +0800 Subject: [PATCH 23/30] Add README.md to Java clients containing documentation like how to build and use the client --- .../codegen/languages/JavaClientCodegen.java | 1 + .../src/main/resources/Java/README.mustache | 43 +++++++++++++++++++ .../client/petstore/java/default/README.md | 43 +++++++++++++++++++ .../client/petstore/java/jersey2/README.md | 43 +++++++++++++++++++ .../petstore/java/okhttp-gson/README.md | 43 +++++++++++++++++++ .../client/petstore/java/retrofit/README.md | 43 +++++++++++++++++++ 6 files changed, 216 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/Java/README.mustache create mode 100644 samples/client/petstore/java/default/README.md create mode 100644 samples/client/petstore/java/jersey2/README.md create mode 100644 samples/client/petstore/java/okhttp-gson/README.md create mode 100644 samples/client/petstore/java/retrofit/README.md diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index a54ec4e038a..decd8daae2a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -202,6 +202,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/"); supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("build.gradle.mustache", "", "build.gradle")); supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); supportingFiles.add(new SupportingFile("gradle.properties.mustache", "", "gradle.properties")); diff --git a/modules/swagger-codegen/src/main/resources/Java/README.mustache b/modules/swagger-codegen/src/main/resources/Java/README.mustache new file mode 100644 index 00000000000..7ce9bac3ca0 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Java/README.mustache @@ -0,0 +1,43 @@ +# {{artifactId}} + +## Requirements + +Building the API client library requires [Maven](https://maven.apache.org/) to be installed. + +## Installation & Usage + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn deploy +``` + +Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. + +After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: + +```xml + + {{groupId}} + {{artifactId}} + {{artifactVersion}} + compile + + +``` + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue. + +## Author + +{{#apiInfo}}{{#apis}}{{^hasMore}}{{infoEmail}} +{{/hasMore}}{{/apis}}{{/apiInfo}} + diff --git a/samples/client/petstore/java/default/README.md b/samples/client/petstore/java/default/README.md new file mode 100644 index 00000000000..8afc37518fc --- /dev/null +++ b/samples/client/petstore/java/default/README.md @@ -0,0 +1,43 @@ +# swagger-java-client + +## Requirements + +Building the API client library requires [Maven](https://maven.apache.org/) to be installed. + +## Installation & Usage + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn deploy +``` + +Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. + +After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: + +```xml + + io.swagger + swagger-java-client + 1.0.0 + compile + + +``` + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue. + +## Author + +apiteam@swagger.io + + diff --git a/samples/client/petstore/java/jersey2/README.md b/samples/client/petstore/java/jersey2/README.md new file mode 100644 index 00000000000..473892d2321 --- /dev/null +++ b/samples/client/petstore/java/jersey2/README.md @@ -0,0 +1,43 @@ +# swagger-petstore-jersey2 + +## Requirements + +Building the API client library requires [Maven](https://maven.apache.org/) to be installed. + +## Installation & Usage + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn deploy +``` + +Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. + +After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: + +```xml + + io.swagger + swagger-petstore-jersey2 + 1.0.0 + compile + + +``` + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue. + +## Author + +apiteam@swagger.io + + diff --git a/samples/client/petstore/java/okhttp-gson/README.md b/samples/client/petstore/java/okhttp-gson/README.md new file mode 100644 index 00000000000..be7ff686b7a --- /dev/null +++ b/samples/client/petstore/java/okhttp-gson/README.md @@ -0,0 +1,43 @@ +# swagger-petstore-okhttp-gson + +## Requirements + +Building the API client library requires [Maven](https://maven.apache.org/) to be installed. + +## Installation & Usage + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn deploy +``` + +Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. + +After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: + +```xml + + io.swagger + swagger-petstore-okhttp-gson + 1.0.0 + compile + + +``` + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue. + +## Author + +apiteam@swagger.io + + diff --git a/samples/client/petstore/java/retrofit/README.md b/samples/client/petstore/java/retrofit/README.md new file mode 100644 index 00000000000..b687b09ab26 --- /dev/null +++ b/samples/client/petstore/java/retrofit/README.md @@ -0,0 +1,43 @@ +# swagger-petstore-retrofit + +## Requirements + +Building the API client library requires [Maven](https://maven.apache.org/) to be installed. + +## Installation & Usage + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn deploy +``` + +Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. + +After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: + +```xml + + io.swagger + swagger-petstore-retrofit + 1.0.0 + compile + + +``` + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue. + +## Author + +apiteam@swagger.io + + From 2f76f28dd45e33945a2b94a1af4b00334c8527f0 Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Fri, 6 Nov 2015 15:44:32 +0300 Subject: [PATCH 24/30] apiPackage and modelPackage options haave been moved from DefaultCodegen to classes, that uses it --- .../src/main/java/io/swagger/codegen/DefaultCodegen.java | 2 -- .../swagger/codegen/languages/AkkaScalaClientCodegen.java | 5 +++++ .../io/swagger/codegen/languages/AndroidClientCodegen.java | 2 ++ .../swagger/codegen/languages/AsyncScalaClientCodegen.java | 4 ++++ .../io/swagger/codegen/languages/JavaClientCodegen.java | 2 ++ .../java/io/swagger/codegen/languages/PhpClientCodegen.java | 2 ++ .../io/swagger/codegen/languages/ScalaClientCodegen.java | 4 ++++ .../io/swagger/codegen/languages/ScalatraServerCodegen.java | 4 ++++ .../java/io/swagger/codegen/dart/DartClientOptionsTest.java | 4 ---- .../io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java | 4 ---- .../swagger/codegen/options/DartClientOptionsProvider.java | 6 +----- .../codegen/options/NodeJSServerOptionsProvider.java | 6 +----- .../io/swagger/codegen/options/Qt5CPPOptionsProvider.java | 6 +----- .../swagger/codegen/options/SilexServerOptionsProvider.java | 6 +----- .../swagger/codegen/options/StaticDocOptionsProvider.java | 6 +----- .../swagger/codegen/options/StaticHtmlOptionsProvider.java | 6 +----- .../io/swagger/codegen/options/SwaggerOptionsProvider.java | 6 +----- .../swagger/codegen/options/SwaggerYamlOptionsProvider.java | 6 +----- .../io/swagger/codegen/options/SwiftOptionsProvider.java | 6 +----- .../swagger/codegen/options/TizenClientOptionsProvider.java | 6 +----- .../options/TypeScriptAngularClientOptionsProvider.java | 6 +----- .../options/TypeScriptNodeClientOptionsProvider.java | 6 +----- .../io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java | 4 ---- .../io/swagger/codegen/silex/SilexServerOptionsTest.java | 4 ---- .../io/swagger/codegen/staticDocs/StaticDocOptionsTest.java | 4 ---- .../swagger/codegen/statichtml/StaticHtmlOptionsTest.java | 4 ---- .../java/io/swagger/codegen/swagger/SwaggerOptionsTest.java | 4 ---- .../swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java | 4 ---- .../java/io/swagger/codegen/swift/SwiftOptionsTest.java | 4 ---- .../io/swagger/codegen/tizen/TizenClientOptionsTest.java | 4 ---- .../TypeScriptAngularClientOptionsTest.java | 4 ---- .../typescriptnode/TypeScriptNodeClientOptionsTest.java | 4 ---- 32 files changed, 35 insertions(+), 110 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 8ab40633c87..2a37556c774 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -443,8 +443,6 @@ public class DefaultCodegen { importMapping.put("LocalDate", "org.joda.time.*"); importMapping.put("LocalTime", "org.joda.time.*"); - cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); - cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue("true")); cliOptions.add(new CliOption(CodegenConstants.ENSURE_UNIQUE_PARAMS, CodegenConstants.ENSURE_UNIQUE_PARAMS_DESC)); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java index 312f087f83c..29732f1d45a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java @@ -3,6 +3,8 @@ package io.swagger.codegen.languages; import com.google.common.base.CaseFormat; import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Template; + +import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenOperation; @@ -147,6 +149,9 @@ public class AkkaScalaClientCodegen extends DefaultCodegen implements CodegenCon ); instantiationTypes.put("array", "ListBuffer"); instantiationTypes.put("map", "Map"); + + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); } public CodegenType getTag() { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java index abfe970088b..7983d83cea1 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java @@ -60,6 +60,8 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi instantiationTypes.put("array", "ArrayList"); instantiationTypes.put("map", "HashMap"); + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, "groupId for use in the generated build.gradle and pom.xml")); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, "artifactId for use in the generated build.gradle and pom.xml")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java index e033b9f3cf3..5e85712ffcd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java @@ -1,5 +1,6 @@ package io.swagger.codegen.languages; +import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; @@ -105,6 +106,9 @@ public class AsyncScalaClientCodegen extends DefaultCodegen implements CodegenCo ); instantiationTypes.put("array", "ListBuffer"); instantiationTypes.put("map", "HashMap"); + + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); } public CodegenType getTag() { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index a54ec4e038a..028b360987d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -84,6 +84,8 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { instantiationTypes.put("array", "ArrayList"); instantiationTypes.put("map", "HashMap"); + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, CodegenConstants.GROUP_ID_DESC)); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, CodegenConstants.ARTIFACT_ID_DESC)); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java index 4653d6a5299..5b22fbdbadb 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java @@ -91,6 +91,8 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("object", "object"); typeMapping.put("DateTime", "\\DateTime"); + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(VARIABLE_NAMING_CONVENTION, "naming convention of variable name, e.g. camelCase.") .defaultValue("snake_case")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, "The main namespace to use for all classes. e.g. Yay\\Pets")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java index 3da348ad530..b2f5b9571dd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java @@ -1,5 +1,6 @@ package io.swagger.codegen.languages; +import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; @@ -106,6 +107,9 @@ public class ScalaClientCodegen extends DefaultCodegen implements CodegenConfig ); instantiationTypes.put("array", "ListBuffer"); instantiationTypes.put("map", "HashMap"); + + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); } public CodegenType getTag() { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java index 81106955d84..d50fa867887 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java @@ -1,5 +1,6 @@ package io.swagger.codegen.languages; +import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenOperation; @@ -117,6 +118,9 @@ public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConf importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime"); importMapping.put("LocalDate", "org.joda.time.LocalDate"); importMapping.put("LocalTime", "org.joda.time.LocalTime"); + + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); } public CodegenType getTag() { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java index b4ac84be47f..b002fd99978 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java @@ -25,10 +25,6 @@ public class DartClientOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(DartClientOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(DartClientOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(DartClientOptionsProvider.SORT_PARAMS_VALUE)); times = 1; clientCodegen.setBrowserClient(Boolean.valueOf(DartClientOptionsProvider.BROWSER_CLIENT_VALUE)); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java index 6b24bc6f251..ce905315ae3 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java @@ -25,10 +25,6 @@ public class NodeJSServerOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(NodeJSServerOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(NodeJSServerOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(NodeJSServerOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java index 018913fa3ba..72066f54053 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/DartClientOptionsProvider.java @@ -8,8 +8,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class DartClientOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "packagedart"; - public static final String API_PACKAGE_VALUE = "apiPackageDart"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String BROWSER_CLIENT_VALUE = "true"; @@ -26,9 +24,7 @@ public class DartClientOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(DartClientCodegen.BROWSER_CLIENT, BROWSER_CLIENT_VALUE) .put(DartClientCodegen.PUB_NAME, PUB_NAME_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java index d4cfce1c9b7..3d49fcb8d01 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/NodeJSServerOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class NodeJSServerOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class NodeJSServerOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java index c0583639fbe..05f9f1f068c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Qt5CPPOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class Qt5CPPOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class Qt5CPPOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java index 553b24414f6..ae6596923d2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SilexServerOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class SilexServerOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class SilexServerOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java index 5cd8325606c..5e198a0e91a 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class StaticDocOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class StaticDocOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java index 5fe534b52c1..f236ff40dc0 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class StaticHtmlOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class StaticHtmlOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java index 4d1997484e2..e97860e83ab 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class SwaggerOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class SwaggerOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java index 1797e2888fb..ff5daa86797 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwaggerYamlOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class SwaggerYamlOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class SwaggerYamlOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java index a31159abf1c..507d3b62829 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SwiftOptionsProvider.java @@ -8,8 +8,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class SwiftOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String PROJECT_NAME_VALUE = "Swagger"; @@ -36,9 +34,7 @@ public class SwiftOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(SwiftCodegen.PROJECT_NAME, PROJECT_NAME_VALUE) .put(SwiftCodegen.RESPONSE_AS, RESPONSE_AS_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java index 80194388da0..ff8659627f4 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TizenClientOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class TizenClientOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class TizenClientOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java index 2b69f5e12f1..d7d4e5392fc 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptAngularClientOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class TypeScriptAngularClientOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class TypeScriptAngularClientOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java index 6a7ac239f15..e1c0259222e 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/TypeScriptNodeClientOptionsProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; public class TypeScriptNodeClientOptionsProvider implements OptionsProvider { - public static final String MODEL_PACKAGE_VALUE = "package"; - public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; @@ -20,9 +18,7 @@ public class TypeScriptNodeClientOptionsProvider implements OptionsProvider { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) - .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java index c7bb169de21..389721d3841 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java @@ -25,10 +25,6 @@ public class Qt5CPPOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(Qt5CPPOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(Qt5CPPOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(Qt5CPPOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java index 54635f02799..11681230289 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java @@ -25,10 +25,6 @@ public class SilexServerOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(SilexServerOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(SilexServerOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SilexServerOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java index 5ae4064c4ec..bc2da143efb 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java @@ -25,10 +25,6 @@ public class StaticDocOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(StaticDocOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(StaticDocOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(StaticDocOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java index c09ada506f0..befe62e32c4 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java @@ -25,10 +25,6 @@ public class StaticHtmlOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(StaticHtmlOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(StaticHtmlOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(StaticHtmlOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java index 85368a44486..f2f461f2b70 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java @@ -25,10 +25,6 @@ public class SwaggerOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(SwaggerOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(SwaggerOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SwaggerOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java index 5ea5a7c346b..a1478a8ba05 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java @@ -25,10 +25,6 @@ public class SwaggerYamlOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(SwaggerYamlOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(SwaggerYamlOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SwaggerYamlOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java index f76f1500f8b..7d3504f67de 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java @@ -25,10 +25,6 @@ public class SwiftOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(SwiftOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(SwiftOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SwiftOptionsProvider.SORT_PARAMS_VALUE)); times = 1; clientCodegen.setProjectName(SwiftOptionsProvider.PROJECT_NAME_VALUE); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java index 670c32017de..83ebb8be15e 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java @@ -25,10 +25,6 @@ public class TizenClientOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(TizenClientOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(TizenClientOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(TizenClientOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java index d8e6589f17a..3fdf817dc58 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java @@ -25,10 +25,6 @@ public class TypeScriptAngularClientOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(TypeScriptAngularClientOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(TypeScriptAngularClientOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(TypeScriptAngularClientOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java index 7d94f21f048..2374011b1b9 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java @@ -25,10 +25,6 @@ public class TypeScriptNodeClientOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(TypeScriptNodeClientOptionsProvider.MODEL_PACKAGE_VALUE); - times = 1; - clientCodegen.setApiPackage(TypeScriptNodeClientOptionsProvider.API_PACKAGE_VALUE); - times = 1; clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(TypeScriptNodeClientOptionsProvider.SORT_PARAMS_VALUE)); times = 1; }}; From 0d12f32b05197955aca99483c73e297e5cde8877 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 6 Nov 2015 21:00:04 +0800 Subject: [PATCH 25/30] update cli option for perl --- .../io/swagger/codegen/languages/PerlClientCodegen.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index 0a64854712b..43abf9f1ce5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -70,8 +70,11 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("object", "object"); cliOptions.clear(); - cliOptions.add(new CliOption(MODULE_NAME, "perl module name (convention: CamelCase).").defaultValue("SwaggerClient")); - cliOptions.add(new CliOption(MODULE_VERSION, "perl module version.").defaultValue("1.0.0")); + cliOptions.add(new CliOption(MODULE_NAME, "Perl module name (convention: CamelCase).").defaultValue("SwaggerClient")); + cliOptions.add(new CliOption(MODULE_VERSION, "Perl module version.").defaultValue("1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); + cliOptions.add(new CliOption(CodegenConstants.ENSURE_UNIQUE_PARAMS, CodegenConstants.ENSURE_UNIQUE_PARAMS_DESC)); + } From f7ffc7f118b33bae2765c05af7cbdf40957d90d6 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 6 Nov 2015 21:24:04 +0800 Subject: [PATCH 26/30] update test case for perl --- .../java/io/swagger/codegen/languages/PerlClientCodegen.java | 3 ++- .../io/swagger/codegen/options/PerlClientOptionsProvider.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index 43abf9f1ce5..ddbd6c7e217 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -4,10 +4,11 @@ import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.CliOption; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; -import io.swagger.codegen.CliOption; import java.io.File; import java.util.Arrays; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PerlClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PerlClientOptionsProvider.java index 5bf55f4d160..5ffe04bff2b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PerlClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/PerlClientOptionsProvider.java @@ -1,5 +1,7 @@ package io.swagger.codegen.options; +import io.swagger.codegen.CodegenConstants; + import io.swagger.codegen.languages.PerlClientCodegen; import com.google.common.collect.ImmutableMap; @@ -20,6 +22,8 @@ public class PerlClientOptionsProvider implements OptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); return builder.put(PerlClientCodegen.MODULE_NAME, MODULE_NAME_VALUE) .put(PerlClientCodegen.MODULE_VERSION, MODULE_VERSION_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, "true") .build(); } From 3ff060fa900e6af856cb2fd1296a76bc8aafc14d Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 6 Nov 2015 21:46:47 +0800 Subject: [PATCH 27/30] add reserved word handling for typescript --- .../AbstractTypeScriptClientCodegen.java | 29 ++-- .../typescript-angular/API/Client/Category.ts | 11 -- .../typescript-angular/API/Client/Order.ts | 35 ----- .../typescript-angular/API/Client/Pet.ts | 35 ----- .../typescript-angular/API/Client/PetApi.ts | 101 ------------- .../typescript-angular/API/Client/StoreApi.ts | 83 +++++----- .../typescript-angular/API/Client/Tag.ts | 11 -- .../typescript-angular/API/Client/User.ts | 24 --- .../typescript-angular/API/Client/UserApi.ts | 143 +++++++----------- 9 files changed, 115 insertions(+), 357 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index 38c0c5307ba..a8d66491851 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -6,6 +6,8 @@ import io.swagger.models.properties.*; import java.util.*; import java.io.File; +import org.apache.commons.lang.StringUtils; + public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public CodegenType getTag() { @@ -15,14 +17,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp public AbstractTypeScriptClientCodegen() { super(); supportsInheritance = true; - reservedWords = new HashSet(Arrays.asList("abstract", - "continue", "for", "new", "switch", "assert", "default", "if", - "package", "synchronized", "do", "goto", "private", - "this", "break", "double", "implements", "protected", "throw", - "byte", "else", "import", "public", "throws", "case", "enum", - "instanceof", "return", "transient", "catch", "extends", "int", - "short", "try", "char", "final", "interface", "static", "void", - "class", "finally", "const", "super", "while")); + reservedWords = new HashSet(Arrays.asList("abstract", "await", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "debugger", "default", "delete", "do", "double", "else", "enum", "export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "import", "in", "instanceof", "int", "interface", "let", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "transient", "true", "try", "typeof", "var", "void", "volatile", "while", "with", "yield")); languageSpecificPrimitives = new HashSet(Arrays.asList( "String", @@ -79,7 +74,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp return name; // camelize the variable name - // pet_id => PetId + // pet_id => petId name = camelize(name, true); // for reserved word or word starting with number, append _ @@ -141,4 +136,20 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp type = swaggerType; return type; } + + @Override + public String toOperationId(String operationId) { + // throw exception if method name is empty + if (StringUtils.isEmpty(operationId)) { + throw new RuntimeException("Empty method name (operationId) not allowed"); + } + + // method name cannot use reserved keyword, e.g. return + // append _ at the beginning, e.g. _return + if (reservedWords.contains(operationId)) { + return escapeReservedWord(camelize(sanitizeName(operationId), true)); + } + + return camelize(sanitizeName(operationId), true); + } } diff --git a/samples/client/petstore/typescript-angular/API/Client/Category.ts b/samples/client/petstore/typescript-angular/API/Client/Category.ts index 532d9bb0856..ad34870b31a 100644 --- a/samples/client/petstore/typescript-angular/API/Client/Category.ts +++ b/samples/client/petstore/typescript-angular/API/Client/Category.ts @@ -3,22 +3,11 @@ namespace API.Client { 'use strict'; - - - export interface Category { - - id: number; - - name: string; - } - - - } diff --git a/samples/client/petstore/typescript-angular/API/Client/Order.ts b/samples/client/petstore/typescript-angular/API/Client/Order.ts index 11a0fafe293..dfffcd3d828 100644 --- a/samples/client/petstore/typescript-angular/API/Client/Order.ts +++ b/samples/client/petstore/typescript-angular/API/Client/Order.ts @@ -3,65 +3,30 @@ namespace API.Client { 'use strict'; - - - export interface Order { - - id: number; - - petId: number; - - quantity: number; - - shipDate: Date; - - /** * Order Status */ - status: Order.StatusEnum; - - complete: boolean; - } - export namespace Order { - - - - - - - - - - export enum StatusEnum { placed = 'placed', approved = 'approved', delivered = 'delivered', } - - - - } - - - } diff --git a/samples/client/petstore/typescript-angular/API/Client/Pet.ts b/samples/client/petstore/typescript-angular/API/Client/Pet.ts index acbb6bcb6c2..fa86c457fcf 100644 --- a/samples/client/petstore/typescript-angular/API/Client/Pet.ts +++ b/samples/client/petstore/typescript-angular/API/Client/Pet.ts @@ -3,65 +3,30 @@ namespace API.Client { 'use strict'; - - - export interface Pet { - - id: number; - - category: Category; - - name: string; - - photoUrls: Array; - - tags: Array; - - /** * pet status in the store */ - status: Pet.StatusEnum; - } - export namespace Pet { - - - - - - - - - - - - export enum StatusEnum { available = 'available', pending = 'pending', sold = 'sold', } - - } - - - } diff --git a/samples/client/petstore/typescript-angular/API/Client/PetApi.ts b/samples/client/petstore/typescript-angular/API/Client/PetApi.ts index 6e7dd50c6aa..7c89b754914 100644 --- a/samples/client/petstore/typescript-angular/API/Client/PetApi.ts +++ b/samples/client/petstore/typescript-angular/API/Client/PetApi.ts @@ -2,11 +2,9 @@ /* tslint:disable:no-unused-variable member-ordering */ - namespace API.Client { 'use strict'; - export class PetApi { protected basePath = 'http://petstore.swagger.io/v2'; public defaultHeaders : any = {}; @@ -29,20 +27,11 @@ namespace API.Client { } - public updatePet (body?: Pet, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { const path = this.basePath + '/pet'; let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - - - - - - - - let httpRequestParams: any = { method: 'PUT', url: path, @@ -61,20 +50,11 @@ namespace API.Client { return this.$http(httpRequestParams); } - public addPet (body?: Pet, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { const path = this.basePath + '/pet'; let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - - - - - - - - let httpRequestParams: any = { method: 'POST', url: path, @@ -93,25 +73,15 @@ namespace API.Client { return this.$http(httpRequestParams); } - public findPetsByStatus (status?: Array, extraHttpRequestParams?: any ) : ng.IHttpPromise> { const path = this.basePath + '/pet/findByStatus'; let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - - - - - if (status !== undefined) { queryParameters['status'] = status; } - - - - let httpRequestParams: any = { method: 'GET', url: path, @@ -129,25 +99,15 @@ namespace API.Client { return this.$http(httpRequestParams); } - public findPetsByTags (tags?: Array, extraHttpRequestParams?: any ) : ng.IHttpPromise> { const path = this.basePath + '/pet/findByTags'; let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - - - - - if (tags !== undefined) { queryParameters['tags'] = tags; } - - - - let httpRequestParams: any = { method: 'GET', url: path, @@ -165,26 +125,16 @@ namespace API.Client { return this.$http(httpRequestParams); } - public getPetById (petId: number, extraHttpRequestParams?: any ) : ng.IHttpPromise { const path = this.basePath + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - - - // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling getPetById'); } - - - - - - let httpRequestParams: any = { method: 'GET', url: path, @@ -202,42 +152,24 @@ namespace API.Client { return this.$http(httpRequestParams); } - public updatePetWithForm (petId: string, name?: string, status?: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { const path = this.basePath + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - let formParams: any = {}; - - - // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling updatePetWithForm'); } - - - - - - - - - headerParams['Content-Type'] = 'application/x-www-form-urlencoded'; - - formParams['name'] = name; - formParams['status'] = status; - let httpRequestParams: any = { method: 'POST', url: path, @@ -256,31 +188,18 @@ namespace API.Client { return this.$http(httpRequestParams); } - public deletePet (petId: number, apiKey?: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { const path = this.basePath + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - - - // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling deletePet'); } - - - - - - headerParams['api_key'] = apiKey; - - - let httpRequestParams: any = { method: 'DELETE', url: path, @@ -298,42 +217,24 @@ namespace API.Client { return this.$http(httpRequestParams); } - public uploadFile (petId: number, additionalMetadata?: string, file?: any, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { const path = this.basePath + '/pet/{petId}/uploadImage' .replace('{' + 'petId' + '}', String(petId)); let queryParameters: any = {}; let headerParams: any = this.extendObj({}, this.defaultHeaders); - let formParams: any = {}; - - - // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling uploadFile'); } - - - - - - - - - headerParams['Content-Type'] = 'application/x-www-form-urlencoded'; - - formParams['additionalMetadata'] = additionalMetadata; - formParams['file'] = file; - let httpRequestParams: any = { method: 'POST', url: path, @@ -351,7 +252,5 @@ namespace API.Client { return this.$http(httpRequestParams); } - } } - diff --git a/samples/client/petstore/typescript-angular/API/Client/StoreApi.ts b/samples/client/petstore/typescript-angular/API/Client/StoreApi.ts index 739f6039e6c..801a86a4a04 100644 --- a/samples/client/petstore/typescript-angular/API/Client/StoreApi.ts +++ b/samples/client/petstore/typescript-angular/API/Client/StoreApi.ts @@ -2,26 +2,37 @@ /* tslint:disable:no-unused-variable member-ordering */ -module API.Client { +namespace API.Client { 'use strict'; export class StoreApi { - private basePath = 'http://petstore.swagger.io/v2'; + protected basePath = 'http://petstore.swagger.io/v2'; + public defaultHeaders : any = {}; static $inject: string[] = ['$http', '$httpParamSerializer']; - constructor(private $http: ng.IHttpService, basePath?: string, private $httpParamSerializer?: (any) => any) { + constructor(protected $http: ng.IHttpService, protected $httpParamSerializer?: (d: any) => any, basePath?: string) { if (basePath) { this.basePath = basePath; } } - public getInventory (extraHttpRequestParams?: any ) : ng.IHttpPromise<{ [key: string]: number; }> { - var path = this.basePath + '/store/inventory'; + private extendObj(objA: T1, objB: T2) { + for(let key in objB){ + if(objB.hasOwnProperty(key)){ + objA[key] = objB[key]; + } + } + return objA; + } - var queryParameters: any = {}; - var headerParams: any = {}; - var httpRequestParams: any = { + + public getInventory (extraHttpRequestParams?: any ) : ng.IHttpPromise<{ [key: string]: number; }> { + const path = this.basePath + '/store/inventory'; + + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let httpRequestParams: any = { method: 'GET', url: path, json: true, @@ -32,22 +43,18 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public placeOrder (body?: Order, extraHttpRequestParams?: any ) : ng.IHttpPromise { - var path = this.basePath + '/store/order'; + const path = this.basePath + '/store/order'; - var queryParameters: any = {}; - var headerParams: any = {}; - var httpRequestParams: any = { + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let httpRequestParams: any = { method: 'POST', url: path, json: true, @@ -59,29 +66,23 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public getOrderById (orderId: string, extraHttpRequestParams?: any ) : ng.IHttpPromise { - var path = this.basePath + '/store/order/{orderId}'; + const path = this.basePath + '/store/order/{orderId}' + .replace('{' + 'orderId' + '}', String(orderId)); - path = path.replace('{' + 'orderId' + '}', String(orderId)); - - var queryParameters: any = {}; - var headerParams: any = {}; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); // verify required parameter 'orderId' is set if (!orderId) { throw new Error('Missing required parameter orderId when calling getOrderById'); } - - var httpRequestParams: any = { + let httpRequestParams: any = { method: 'GET', url: path, json: true, @@ -92,29 +93,23 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public deleteOrder (orderId: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/store/order/{orderId}'; + const path = this.basePath + '/store/order/{orderId}' + .replace('{' + 'orderId' + '}', String(orderId)); - path = path.replace('{' + 'orderId' + '}', String(orderId)); - - var queryParameters: any = {}; - var headerParams: any = {}; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); // verify required parameter 'orderId' is set if (!orderId) { throw new Error('Missing required parameter orderId when calling deleteOrder'); } - - var httpRequestParams: any = { + let httpRequestParams: any = { method: 'DELETE', url: path, json: true, @@ -125,11 +120,7 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); diff --git a/samples/client/petstore/typescript-angular/API/Client/Tag.ts b/samples/client/petstore/typescript-angular/API/Client/Tag.ts index 525d5ff8ab1..d206559a0ef 100644 --- a/samples/client/petstore/typescript-angular/API/Client/Tag.ts +++ b/samples/client/petstore/typescript-angular/API/Client/Tag.ts @@ -3,22 +3,11 @@ namespace API.Client { 'use strict'; - - - export interface Tag { - - id: number; - - name: string; - } - - - } diff --git a/samples/client/petstore/typescript-angular/API/Client/User.ts b/samples/client/petstore/typescript-angular/API/Client/User.ts index 274b2e866e3..e60f84bb6c6 100644 --- a/samples/client/petstore/typescript-angular/API/Client/User.ts +++ b/samples/client/petstore/typescript-angular/API/Client/User.ts @@ -3,50 +3,26 @@ namespace API.Client { 'use strict'; - - - export interface User { - - id: number; - - username: string; - - firstName: string; - - lastName: string; - - email: string; - - password: string; - - phone: string; - - /** * User Status */ - userStatus: number; - } - - - } diff --git a/samples/client/petstore/typescript-angular/API/Client/UserApi.ts b/samples/client/petstore/typescript-angular/API/Client/UserApi.ts index 26ebd693db9..4deb8bc6ebe 100644 --- a/samples/client/petstore/typescript-angular/API/Client/UserApi.ts +++ b/samples/client/petstore/typescript-angular/API/Client/UserApi.ts @@ -2,26 +2,37 @@ /* tslint:disable:no-unused-variable member-ordering */ -module API.Client { +namespace API.Client { 'use strict'; export class UserApi { - private basePath = 'http://petstore.swagger.io/v2'; + protected basePath = 'http://petstore.swagger.io/v2'; + public defaultHeaders : any = {}; static $inject: string[] = ['$http', '$httpParamSerializer']; - constructor(private $http: ng.IHttpService, basePath?: string, private $httpParamSerializer?: (any) => any) { + constructor(protected $http: ng.IHttpService, protected $httpParamSerializer?: (d: any) => any, basePath?: string) { if (basePath) { this.basePath = basePath; } } - public createUser (body?: User, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/user'; + private extendObj(objA: T1, objB: T2) { + for(let key in objB){ + if(objB.hasOwnProperty(key)){ + objA[key] = objB[key]; + } + } + return objA; + } - var queryParameters: any = {}; - var headerParams: any = {}; - var httpRequestParams: any = { + + public createUser (body?: User, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { + const path = this.basePath + '/user'; + + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let httpRequestParams: any = { method: 'POST', url: path, json: true, @@ -33,22 +44,18 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public createUsersWithArrayInput (body?: Array, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/user/createWithArray'; + const path = this.basePath + '/user/createWithArray'; - var queryParameters: any = {}; - var headerParams: any = {}; - var httpRequestParams: any = { + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let httpRequestParams: any = { method: 'POST', url: path, json: true, @@ -60,22 +67,18 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public createUsersWithListInput (body?: Array, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/user/createWithList'; + const path = this.basePath + '/user/createWithList'; - var queryParameters: any = {}; - var headerParams: any = {}; - var httpRequestParams: any = { + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let httpRequestParams: any = { method: 'POST', url: path, json: true, @@ -87,21 +90,17 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public loginUser (username?: string, password?: string, extraHttpRequestParams?: any ) : ng.IHttpPromise { - var path = this.basePath + '/user/login'; + const path = this.basePath + '/user/login'; - var queryParameters: any = {}; - var headerParams: any = {}; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); if (username !== undefined) { queryParameters['username'] = username; } @@ -110,7 +109,7 @@ module API.Client { queryParameters['password'] = password; } - var httpRequestParams: any = { + let httpRequestParams: any = { method: 'GET', url: path, json: true, @@ -121,22 +120,18 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public logoutUser (extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/user/logout'; + const path = this.basePath + '/user/logout'; - var queryParameters: any = {}; - var headerParams: any = {}; - var httpRequestParams: any = { + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let httpRequestParams: any = { method: 'GET', url: path, json: true, @@ -147,29 +142,23 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public getUserByName (username: string, extraHttpRequestParams?: any ) : ng.IHttpPromise { - var path = this.basePath + '/user/{username}'; + const path = this.basePath + '/user/{username}' + .replace('{' + 'username' + '}', String(username)); - path = path.replace('{' + 'username' + '}', String(username)); - - var queryParameters: any = {}; - var headerParams: any = {}; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); // verify required parameter 'username' is set if (!username) { throw new Error('Missing required parameter username when calling getUserByName'); } - - var httpRequestParams: any = { + let httpRequestParams: any = { method: 'GET', url: path, json: true, @@ -180,29 +169,23 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public updateUser (username: string, body?: User, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/user/{username}'; + const path = this.basePath + '/user/{username}' + .replace('{' + 'username' + '}', String(username)); - path = path.replace('{' + 'username' + '}', String(username)); - - var queryParameters: any = {}; - var headerParams: any = {}; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); // verify required parameter 'username' is set if (!username) { throw new Error('Missing required parameter username when calling updateUser'); } - - var httpRequestParams: any = { + let httpRequestParams: any = { method: 'PUT', url: path, json: true, @@ -214,29 +197,23 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); } public deleteUser (username: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<{}> { - var path = this.basePath + '/user/{username}'; + const path = this.basePath + '/user/{username}' + .replace('{' + 'username' + '}', String(username)); - path = path.replace('{' + 'username' + '}', String(username)); - - var queryParameters: any = {}; - var headerParams: any = {}; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); // verify required parameter 'username' is set if (!username) { throw new Error('Missing required parameter username when calling deleteUser'); } - - var httpRequestParams: any = { + let httpRequestParams: any = { method: 'DELETE', url: path, json: true, @@ -247,11 +224,7 @@ module API.Client { }; if (extraHttpRequestParams) { - for (var k in extraHttpRequestParams) { - if (extraHttpRequestParams.hasOwnProperty(k)) { - httpRequestParams[k] = extraHttpRequestParams[k]; - } - } + httpRequestParams = this.extendObj(httpRequestParams, extraHttpRequestParams); } return this.$http(httpRequestParams); From 147d8047fe2155a936154b2a7e7d612247b9e190 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 6 Nov 2015 21:49:03 +0800 Subject: [PATCH 28/30] update typescript sample --- .../client/petstore/typescript-node/api.ts | 832 +++++------------- 1 file changed, 228 insertions(+), 604 deletions(-) diff --git a/samples/client/petstore/typescript-node/api.ts b/samples/client/petstore/typescript-node/api.ts index 7ee27e06dd1..47026929d81 100644 --- a/samples/client/petstore/typescript-node/api.ts +++ b/samples/client/petstore/typescript-node/api.ts @@ -8,181 +8,69 @@ import http = require('http'); /* tslint:disable:no-unused-variable */ - - - export class User { - - id: number; - - username: string; - - firstName: string; - - lastName: string; - - email: string; - - password: string; - - phone: string; - - /** * User Status */ - userStatus: number; - } - - - - - export class Category { - - id: number; - - name: string; - } - - - - - export class Pet { - - id: number; - - category: Category; - - name: string; - - photoUrls: Array; - - tags: Array; - - /** * pet status in the store */ - status: Pet.StatusEnum; - } - export namespace Pet { - - - - - - - - - - - - export enum StatusEnum { available = 'available', pending = 'pending', sold = 'sold', } - - } - - - - - export class Tag { - - id: number; - - name: string; - } - - - - - export class Order { - - id: number; - - petId: number; - - quantity: number; - - shipDate: Date; - - /** * Order Status */ - status: Order.StatusEnum; - - complete: boolean; - } - export namespace Order { - - - - - - - - - - export enum StatusEnum { placed = 'placed', approved = 'approved', delivered = 'delivered', } - - - - } - - - interface Authentication { /** * Apply authentication settings to header and query params. @@ -229,10 +117,6 @@ class VoidAuth implements Authentication { } } - - - - export class UserApi { protected basePath = 'http://petstore.swagger.io/v2'; protected defaultHeaders : any = {}; @@ -241,34 +125,13 @@ export class UserApi { public authentications = { 'default': new VoidAuth(), - - - - - 'petstore_auth': new OAuth(), - - - - 'api_key': new ApiKeyAuth('header', 'api_key'), - - - + 'petstore_auth': new OAuth(), } constructor(url: string, basePath?: string); - - - - - constructor(private url: string, basePathOrUsername: string, password?: string, basePath?: string) { if (password) { - - - - - if (basePath) { this.basePath = basePath; } @@ -279,20 +142,9 @@ export class UserApi { } } - - - - - - - - set apiKey(key: string) { this.authentications.api_key.apiKey = key; } - - - private extendObj(objA: T1, objB: T2) { for(let key in objB){ if(objB.hasOwnProperty(key)){ @@ -302,7 +154,6 @@ export class UserApi { return objA; } - public createUser (body?: User) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/user'; let queryParameters: any = {}; @@ -310,11 +161,8 @@ export class UserApi { let formParams: any = {}; - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -323,12 +171,9 @@ export class UserApi { headers: headerParams, uri: path, json: true, - body: body, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -354,7 +199,6 @@ export class UserApi { return deferred.promise; } - public createUsersWithArrayInput (body?: Array) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/user/createWithArray'; let queryParameters: any = {}; @@ -362,11 +206,8 @@ export class UserApi { let formParams: any = {}; - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -375,12 +216,9 @@ export class UserApi { headers: headerParams, uri: path, json: true, - body: body, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -406,7 +244,6 @@ export class UserApi { return deferred.promise; } - public createUsersWithListInput (body?: Array) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/user/createWithList'; let queryParameters: any = {}; @@ -414,11 +251,8 @@ export class UserApi { let formParams: any = {}; - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -427,12 +261,9 @@ export class UserApi { headers: headerParams, uri: path, json: true, - body: body, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -458,7 +289,6 @@ export class UserApi { return deferred.promise; } - public loginUser (username?: string, password?: string) : Promise<{ response: http.ClientResponse; body: string; }> { const path = this.url + this.basePath + '/user/login'; let queryParameters: any = {}; @@ -466,21 +296,16 @@ export class UserApi { let formParams: any = {}; - if (username !== undefined) { queryParameters['username'] = username; } - if (password !== undefined) { queryParameters['password'] = password; } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body: string; }>(); let requestOptions: request.Options = { @@ -489,10 +314,8 @@ export class UserApi { headers: headerParams, uri: path, json: true, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -518,7 +341,6 @@ export class UserApi { return deferred.promise; } - public logoutUser () : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/user/logout'; let queryParameters: any = {}; @@ -526,11 +348,8 @@ export class UserApi { let formParams: any = {}; - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -539,10 +358,8 @@ export class UserApi { headers: headerParams, uri: path, json: true, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -568,7 +385,6 @@ export class UserApi { return deferred.promise; } - public getUserByName (username: string) : Promise<{ response: http.ClientResponse; body: User; }> { const path = this.url + this.basePath + '/user/{username}' .replace('{' + 'username' + '}', String(username)); @@ -582,11 +398,8 @@ export class UserApi { throw new Error('Missing required parameter username when calling getUserByName'); } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body: User; }>(); let requestOptions: request.Options = { @@ -595,10 +408,8 @@ export class UserApi { headers: headerParams, uri: path, json: true, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -624,7 +435,6 @@ export class UserApi { return deferred.promise; } - public updateUser (username: string, body?: User) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/user/{username}' .replace('{' + 'username' + '}', String(username)); @@ -638,11 +448,8 @@ export class UserApi { throw new Error('Missing required parameter username when calling updateUser'); } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -651,12 +458,9 @@ export class UserApi { headers: headerParams, uri: path, json: true, - body: body, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -682,7 +486,6 @@ export class UserApi { return deferred.promise; } - public deleteUser (username: string) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/user/{username}' .replace('{' + 'username' + '}', String(username)); @@ -696,11 +499,8 @@ export class UserApi { throw new Error('Missing required parameter username when calling deleteUser'); } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -709,10 +509,8 @@ export class UserApi { headers: headerParams, uri: path, json: true, - } - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -737,303 +535,7 @@ export class UserApi { return deferred.promise; } - } - - - - -export class StoreApi { - protected basePath = 'http://petstore.swagger.io/v2'; - protected defaultHeaders : any = {}; - - - - public authentications = { - 'default': new VoidAuth(), - - - - - 'petstore_auth': new OAuth(), - - - - - 'api_key': new ApiKeyAuth('header', 'api_key'), - - - - } - - constructor(url: string, basePath?: string); - - - - - - constructor(private url: string, basePathOrUsername: string, password?: string, basePath?: string) { - if (password) { - - - - - - if (basePath) { - this.basePath = basePath; - } - } else { - if (basePathOrUsername) { - this.basePath = basePathOrUsername - } - } - } - - - - - - - - - - set apiKey(key: string) { - this.authentications.api_key.apiKey = key; - } - - - - private extendObj(objA: T1, objB: T2) { - for(let key in objB){ - if(objB.hasOwnProperty(key)){ - objA[key] = objB[key]; - } - } - return objA; - } - - - public getInventory () : Promise<{ response: http.ClientResponse; body: { [key: string]: number; }; }> { - const path = this.url + this.basePath + '/store/inventory'; - let queryParameters: any = {}; - let headerParams: any = this.extendObj({}, this.defaultHeaders); - let formParams: any = {}; - - - - - let useFormData = false; - - - let deferred = promise.defer<{ response: http.ClientResponse; body: { [key: string]: number; }; }>(); - - let requestOptions: request.Options = { - method: 'GET', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - - } - - - this.authentications.api_key.applyToRequest(requestOptions); - - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - - - public placeOrder (body?: Order) : Promise<{ response: http.ClientResponse; body: Order; }> { - const path = this.url + this.basePath + '/store/order'; - let queryParameters: any = {}; - let headerParams: any = this.extendObj({}, this.defaultHeaders); - let formParams: any = {}; - - - - - let useFormData = false; - - - let deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); - - let requestOptions: request.Options = { - method: 'POST', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - - body: body, - - } - - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - - - public getOrderById (orderId: string) : Promise<{ response: http.ClientResponse; body: Order; }> { - const path = this.url + this.basePath + '/store/order/{orderId}' - .replace('{' + 'orderId' + '}', String(orderId)); - let queryParameters: any = {}; - let headerParams: any = this.extendObj({}, this.defaultHeaders); - let formParams: any = {}; - - - // verify required parameter 'orderId' is set - if (!orderId) { - throw new Error('Missing required parameter orderId when calling getOrderById'); - } - - - - let useFormData = false; - - - let deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); - - let requestOptions: request.Options = { - method: 'GET', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - - } - - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - - - public deleteOrder (orderId: string) : Promise<{ response: http.ClientResponse; body?: any; }> { - const path = this.url + this.basePath + '/store/order/{orderId}' - .replace('{' + 'orderId' + '}', String(orderId)); - let queryParameters: any = {}; - let headerParams: any = this.extendObj({}, this.defaultHeaders); - let formParams: any = {}; - - - // verify required parameter 'orderId' is set - if (!orderId) { - throw new Error('Missing required parameter orderId when calling deleteOrder'); - } - - - - let useFormData = false; - - - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); - - let requestOptions: request.Options = { - method: 'DELETE', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - - } - - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - -} - - - - export class PetApi { protected basePath = 'http://petstore.swagger.io/v2'; protected defaultHeaders : any = {}; @@ -1042,34 +544,13 @@ export class PetApi { public authentications = { 'default': new VoidAuth(), - - - - - 'petstore_auth': new OAuth(), - - - - 'api_key': new ApiKeyAuth('header', 'api_key'), - - - + 'petstore_auth': new OAuth(), } constructor(url: string, basePath?: string); - - - - - constructor(private url: string, basePathOrUsername: string, password?: string, basePath?: string) { if (password) { - - - - - if (basePath) { this.basePath = basePath; } @@ -1080,20 +561,9 @@ export class PetApi { } } - - - - - - - - set apiKey(key: string) { this.authentications.api_key.apiKey = key; } - - - private extendObj(objA: T1, objB: T2) { for(let key in objB){ if(objB.hasOwnProperty(key)){ @@ -1103,7 +573,6 @@ export class PetApi { return objA; } - public updatePet (body?: Pet) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/pet'; let queryParameters: any = {}; @@ -1111,11 +580,8 @@ export class PetApi { let formParams: any = {}; - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -1124,15 +590,11 @@ export class PetApi { headers: headerParams, uri: path, json: true, - body: body, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1158,7 +620,6 @@ export class PetApi { return deferred.promise; } - public addPet (body?: Pet) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/pet'; let queryParameters: any = {}; @@ -1166,11 +627,8 @@ export class PetApi { let formParams: any = {}; - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -1179,15 +637,11 @@ export class PetApi { headers: headerParams, uri: path, json: true, - body: body, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1213,7 +667,6 @@ export class PetApi { return deferred.promise; } - public findPetsByStatus (status?: Array) : Promise<{ response: http.ClientResponse; body: Array; }> { const path = this.url + this.basePath + '/pet/findByStatus'; let queryParameters: any = {}; @@ -1221,16 +674,12 @@ export class PetApi { let formParams: any = {}; - if (status !== undefined) { queryParameters['status'] = status; } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body: Array; }>(); let requestOptions: request.Options = { @@ -1239,13 +688,10 @@ export class PetApi { headers: headerParams, uri: path, json: true, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1271,7 +717,6 @@ export class PetApi { return deferred.promise; } - public findPetsByTags (tags?: Array) : Promise<{ response: http.ClientResponse; body: Array; }> { const path = this.url + this.basePath + '/pet/findByTags'; let queryParameters: any = {}; @@ -1279,16 +724,12 @@ export class PetApi { let formParams: any = {}; - if (tags !== undefined) { queryParameters['tags'] = tags; } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body: Array; }>(); let requestOptions: request.Options = { @@ -1297,13 +738,10 @@ export class PetApi { headers: headerParams, uri: path, json: true, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1329,7 +767,6 @@ export class PetApi { return deferred.promise; } - public getPetById (petId: number) : Promise<{ response: http.ClientResponse; body: Pet; }> { const path = this.url + this.basePath + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); @@ -1343,11 +780,8 @@ export class PetApi { throw new Error('Missing required parameter petId when calling getPetById'); } - - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body: Pet; }>(); let requestOptions: request.Options = { @@ -1356,13 +790,10 @@ export class PetApi { headers: headerParams, uri: path, json: true, - } - this.authentications.api_key.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1388,7 +819,6 @@ export class PetApi { return deferred.promise; } - public updatePetWithForm (petId: string, name?: string, status?: string) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); @@ -1402,23 +832,16 @@ export class PetApi { throw new Error('Missing required parameter petId when calling updatePetWithForm'); } - - let useFormData = false; - if (name !== undefined) { formParams['name'] = name; } - - if (status !== undefined) { formParams['status'] = status; } - - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -1427,13 +850,10 @@ export class PetApi { headers: headerParams, uri: path, json: true, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1459,7 +879,6 @@ export class PetApi { return deferred.promise; } - public deletePet (petId: number, apiKey?: string) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); @@ -1473,14 +892,10 @@ export class PetApi { throw new Error('Missing required parameter petId when calling deletePet'); } - - headerParams['api_key'] = apiKey; - let useFormData = false; - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -1489,13 +904,10 @@ export class PetApi { headers: headerParams, uri: path, json: true, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1521,7 +933,6 @@ export class PetApi { return deferred.promise; } - public uploadFile (petId: number, additionalMetadata?: string, file?: any) : Promise<{ response: http.ClientResponse; body?: any; }> { const path = this.url + this.basePath + '/pet/{petId}/uploadImage' .replace('{' + 'petId' + '}', String(petId)); @@ -1535,25 +946,17 @@ export class PetApi { throw new Error('Missing required parameter petId when calling uploadFile'); } - - let useFormData = false; - if (additionalMetadata !== undefined) { formParams['additionalMetadata'] = additionalMetadata; } - - if (file !== undefined) { formParams['file'] = file; } - useFormData = true; - - let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); let requestOptions: request.Options = { @@ -1562,12 +965,92 @@ export class PetApi { headers: headerParams, uri: path, json: true, - } - this.authentications.petstore_auth.applyToRequest(requestOptions); + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } +} +export class StoreApi { + protected basePath = 'http://petstore.swagger.io/v2'; + protected defaultHeaders : any = {}; + + + + public authentications = { + 'default': new VoidAuth(), + 'api_key': new ApiKeyAuth('header', 'api_key'), + 'petstore_auth': new OAuth(), + } + + constructor(url: string, basePath?: string); + constructor(private url: string, basePathOrUsername: string, password?: string, basePath?: string) { + if (password) { + if (basePath) { + this.basePath = basePath; + } + } else { + if (basePathOrUsername) { + this.basePath = basePathOrUsername + } + } + } + + set apiKey(key: string) { + this.authentications.api_key.apiKey = key; + } + private extendObj(objA: T1, objB: T2) { + for(let key in objB){ + if(objB.hasOwnProperty(key)){ + objA[key] = objB[key]; + } + } + return objA; + } + + public getInventory () : Promise<{ response: http.ClientResponse; body: { [key: string]: number; }; }> { + const path = this.url + this.basePath + '/store/inventory'; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let formParams: any = {}; + + + let useFormData = false; + + let deferred = promise.defer<{ response: http.ClientResponse; body: { [key: string]: number; }; }>(); + + let requestOptions: request.Options = { + method: 'GET', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + } + + this.authentications.api_key.applyToRequest(requestOptions); this.authentications.default.applyToRequest(requestOptions); @@ -1594,7 +1077,148 @@ export class PetApi { return deferred.promise; } + public placeOrder (body?: Order) : Promise<{ response: http.ClientResponse; body: Order; }> { + const path = this.url + this.basePath + '/store/order'; + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let formParams: any = {}; + + + let useFormData = false; + + let deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); + + let requestOptions: request.Options = { + method: 'POST', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + body: body, + } + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } + + public getOrderById (orderId: string) : Promise<{ response: http.ClientResponse; body: Order; }> { + const path = this.url + this.basePath + '/store/order/{orderId}' + .replace('{' + 'orderId' + '}', String(orderId)); + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let formParams: any = {}; + + + // verify required parameter 'orderId' is set + if (!orderId) { + throw new Error('Missing required parameter orderId when calling getOrderById'); + } + + let useFormData = false; + + let deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); + + let requestOptions: request.Options = { + method: 'GET', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + } + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } + + public deleteOrder (orderId: string) : Promise<{ response: http.ClientResponse; body?: any; }> { + const path = this.url + this.basePath + '/store/order/{orderId}' + .replace('{' + 'orderId' + '}', String(orderId)); + let queryParameters: any = {}; + let headerParams: any = this.extendObj({}, this.defaultHeaders); + let formParams: any = {}; + + + // verify required parameter 'orderId' is set + if (!orderId) { + throw new Error('Missing required parameter orderId when calling deleteOrder'); + } + + let useFormData = false; + + let deferred = promise.defer<{ response: http.ClientResponse; body?: any; }>(); + + let requestOptions: request.Options = { + method: 'DELETE', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + } + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } } - - - From 33df72ff5b85a60e12b42362b5264e2bbfaad281 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 6 Nov 2015 09:13:15 -0800 Subject: [PATCH 29/30] made host+scheme configurable --- .../java/io/swagger/generator/Bootstrap.java | 20 +++++++++++++------ .../src/main/webapp/WEB-INF/web.xml | 8 ++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java b/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java index a13995505c7..018d3416149 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java @@ -16,15 +16,14 @@ package io.swagger.generator; -import java.io.IOException; -import java.io.InputStream; +import org.apache.commons.io.IOUtils; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; - -import org.apache.commons.io.IOUtils; +import java.io.IOException; +import java.io.InputStream; public class Bootstrap extends HttpServlet { public void init(ServletConfig config) throws ServletException { @@ -50,8 +49,17 @@ public class Bootstrap extends HttpServlet { } } - bc.setSchemes(new String[]{"https"}); - bc.setHost("generator.swagger.io"); + String host = config.getInitParameter("generator.host"); + if(host == null) { + host = "generator.swagger.io"; + } + bc.setHost(host); + + String scheme = config.getInitParameter("generator.protocol"); + if(host == null) { + scheme = "https"; + } + bc.setSchemes(new String[]{scheme}); bc.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); bc.setResourcePackage("io.swagger.generator.resource"); bc.setScan(true); diff --git a/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml b/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml index b7e33258a5f..e9176739532 100644 --- a/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml +++ b/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml @@ -26,6 +26,14 @@ jersey.config.server.wadl.disableWadl true + + generator.host + localhost:8001 + + + generator.protocol + http + 1 From 195359008a94d4ef07ae7992fcf948b5c830f4f4 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 6 Nov 2015 10:11:23 -0800 Subject: [PATCH 30/30] improved definitions, messages, fixed init params --- .../swagger/generator/model/GeneratorInput.java | 1 + .../io/swagger/generator/model/ResponseCode.java | 4 ++++ .../io/swagger/generator/online/Generator.java | 4 ++++ .../src/main/webapp/WEB-INF/web.xml | 16 ++++++++-------- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/model/GeneratorInput.java b/modules/swagger-generator/src/main/java/io/swagger/generator/model/GeneratorInput.java index 2a653888625..5175ac3b60a 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/model/GeneratorInput.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/model/GeneratorInput.java @@ -29,6 +29,7 @@ public class GeneratorInput { this.options = options; } + @ApiModelProperty(example = "http://petstore.swagger.io/v2/swagger.json") public String getSwaggerUrl() { return swaggerUrl; } diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/model/ResponseCode.java b/modules/swagger-generator/src/main/java/io/swagger/generator/model/ResponseCode.java index ad5b9cdec8f..0fcc5312dac 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/model/ResponseCode.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/model/ResponseCode.java @@ -1,5 +1,7 @@ package io.swagger.generator.model; +import io.swagger.annotations.ApiModelProperty; + public class ResponseCode { private String code; private String link; @@ -12,6 +14,7 @@ public class ResponseCode { setLink(link); } + @ApiModelProperty(value = "File download code", example = "d40029be-eda6-4d62-b1ef-d05e2e91a72a") public String getCode() { return code; } @@ -20,6 +23,7 @@ public class ResponseCode { this.code = code; } + @ApiModelProperty(value = "URL for fetching the generated client", example = "http://generator.swagger.io:80/api/gen/download/d40029be-eda6-4d62-b1ef-d05e2e91a72a") public String getLink() { return link; } diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index a5c14e43715..bc7f4a8cc68 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -72,6 +72,10 @@ public class Generator { throw new BadRequestException(400, "No options were supplied"); } JsonNode node = opts.getSpec(); + if(node != null && "{}".equals(node.toString())) { + LOGGER.debug("ignoring empty spec"); + node = null; + } Swagger swagger; if (node == null) { if (opts.getSwaggerUrl() != null) { diff --git a/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml b/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml index e9176739532..74e3828a8f4 100644 --- a/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml +++ b/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml @@ -26,14 +26,6 @@ jersey.config.server.wadl.disableWadl true - - generator.host - localhost:8001 - - - generator.protocol - http - 1 @@ -50,6 +42,14 @@ Bootstrap io.swagger.generator.Bootstrap 2 + + generator.host + localhost:8001 + + + generator.protocol + http + ApiOriginFilter