From 5fa98b12b85b4eada46b18a06ae9d93c6ce290fc Mon Sep 17 00:00:00 2001 From: gandrianakis Date: Tue, 17 Feb 2015 15:17:32 +0200 Subject: [PATCH 01/32] Fixed bug that did not allow json arrays to be deserialized by Jackson --- .../src/main/resources/Java/apiInvoker.mustache | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache index 881cab13e12..26379c60105 100644 --- a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache @@ -51,8 +51,11 @@ public class ApiInvoker { } public static Object deserialize(String json, String containerType, Class cls) throws ApiException { + if(null != containerType) { + containerType = containerType.toLowerCase(); + } try{ - if("List".equals(containerType)) { + if("list".equals(containerType) || "array".equals(containerType)) { JavaType typeInfo = JsonUtil.getJsonMapper().getTypeFactory().constructCollectionType(List.class, cls); List response = (List) JsonUtil.getJsonMapper().readValue(json, typeInfo); return response; From 279f43d69714dab8c739ec30599576e6646b43c1 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 08:57:39 -0800 Subject: [PATCH 02/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 69f371522e6..71c5e61ee98 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ It's just as easy--just use the `-i` flag to point to either a server or file. ### Modifying the client library format Don't like the default swagger client syntax? Want a different language supported? No problem! Swagger codegen processes mustache templates with the [jmustache](https://github.com/samskivert/jmustache) engine. You can modify our templates or make your own. -You can look at `src/main/resources/${your-language}` for examples. To make your own templates, create your own files and use the `-t` flag to specify your tempalte folder. It actually is that easy. +You can look at `modules/swagger-codegen/src/main/resources/${your-language}` for examples. To make your own templates, create your own files and use the `-t` flag to specify your tempalte folder. It actually is that easy. ### Where is Javascript??? See our [javascript library](http://github.com/swagger-api/swagger-js)--it's completely dynamic and doesn't require From aa37542411107918e8838079b23c765182756d9b Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 10:29:06 -0800 Subject: [PATCH 03/32] added version to make swagger valid --- .../main/java/com/wordnik/swagger/generator/Bootstrap.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java index 0909f593b66..7035b60d1f7 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java @@ -31,11 +31,13 @@ public class Bootstrap extends HttpServlet { bc.setBasePath("/api"); bc.setTitle("Swagger Generator"); bc.setDescription("This is an online swagger codegen server. You can find out more " + - "at https://github.com/wordnik/swagger-generator or on irc.freenode.net, #swagger." + + "at https://github.com/swagger-api/swagger-codegen or on irc.freenode.net, #swagger." + "http://helloreverb.com/terms/"); bc.setTermsOfServiceUrl("http://helloreverb.com/terms/"); bc.setContact("apiteam@swagger.io"); bc.setLicense("Apache 2.0"); + bc.setVersion("1.0.0"); + bc.setHost("generator.swagger.io"); bc.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); bc.setResourcePackage("com.wordnik.swagger.generator.resource"); bc.setScan(true); From 39487d991718a1c373510bd0263b309f129f1cce Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 10:29:35 -0800 Subject: [PATCH 04/32] disabled outdated routes, made languages GET method dynamic --- .../generator/resource/SwaggerResource.java | 46 ++++++++----------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java index 645d777a0c5..a57d800a665 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java @@ -18,6 +18,20 @@ import javax.ws.rs.core.*; public class SwaggerResource { private static Map fileMap = new HashMap(); + static List clients = new ArrayList(); + static List servers = new ArrayList(); + static { + List extensions = Codegen.getExtensions(); + for(CodegenConfig config : extensions) { + if(config.getTag().equals(CodegenType.CLIENT) || config.getTag().equals(CodegenType.DOCUMENTATION)) { + clients.add(config.getName()); + } + else if(config.getTag().equals(CodegenType.SERVER)) { + servers.add(config.getName()); + } + } + } + @GET @Path("/download/{fileId}") @Produces({"application/zip", "application/json"}) @@ -70,46 +84,22 @@ public class SwaggerResource { response = String.class, responseContainer = "List") public Response clientOptions() { - String[] languages = {"android", "java", "php", "objc", "docs"}; + String[] languages = new String[clients.size()]; + languages = clients.toArray(languages); return Response.ok().entity(languages).build(); } - @GET - @Path("/clients/{language}") - @ApiOperation(value = "Gets options for a client generation", - notes = "Values which are not required will use the provided default values", - response = InputOption.class, - responseContainer = "List") - @ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid model supplied", response = ValidationMessage.class), - }) - - public Response clientLibraryOptions( - @ApiParam(value = "The target language for the client library", allowableValues = "android,java,php,objc,docs", required = true) @PathParam("language") String language) { - return Response.ok().entity(Generator.clientOptions(language)).build(); - } - @GET @Path("/servers") @ApiOperation(value = "Gets languages supported by the server generator", response = String.class, responseContainer = "List") public Response serverOptions() { - String[] languages = {"jaxrs","nodejs"}; + String[] languages = new String[servers.size()]; + languages = servers.toArray(languages); return Response.ok().entity(languages).build(); } - @GET - @Path("/servers/{language}") - @ApiOperation(value = "Gets options for a server generation", - notes = "Values which are not required will use the provided default values", - response = InputOption.class, - responseContainer = "List") - public Response serverFrameworkOptions( - @ApiParam(value = "The target framework for the client library", allowableValues = "jaxrs,nodejs", required = true) @PathParam("language") String framework) { - return Response.ok().entity(Generator.serverOptions(framework)).build(); - } - @POST @Path("/servers/{framework}") @ApiOperation(value = "Generates a server library for the supplied server framework", From c832889db87d2b2de0d768d0d4cfa8f2a0886842 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 11:15:08 -0800 Subject: [PATCH 05/32] added slf4j, updated server gen logic --- .../swagger/generator/online/Generator.java | 58 ++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java index 782fb95fcd7..05251b41f30 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java @@ -11,12 +11,18 @@ import com.wordnik.swagger.generator.util.ZipUtil; import com.fasterxml.jackson.databind.JsonNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; import java.util.List; import java.util.ArrayList; public class Generator { + static Logger LOGGER = LoggerFactory.getLogger(Generator.class); + public static String generateClient(String language, GeneratorInput opts) throws ApiException { + LOGGER.debug("generate client for " + language); if(opts == null) { throw new BadRequestException(400, "No options were supplied"); } @@ -67,8 +73,56 @@ public class Generator { return outputFilename; } - public static String generateServer(String language, GeneratorInput opts) { - return ""; + public static String generateServer(String language, GeneratorInput opts) throws ApiException { + LOGGER.debug("generate server for " + language); + if(opts == null) { + throw new BadRequestException(400, "No options were supplied"); + } + JsonNode node = opts.getSpec(); + if(node == null) { + throw new BadRequestException(400, "No swagger specification was supplied"); + } + Swagger swagger = new SwaggerParser().read(node); + if(swagger == null) { + throw new BadRequestException(400, "The swagger specification supplied was not valid"); + } + + ClientOptInput clientOptInput = new ClientOptInput(); + ClientOpts clientOpts = new ClientOpts(); + String outputFolder = getTmpFolder().getAbsolutePath() + File.separator + language + "-server"; + String outputFilename = outputFolder + "-bundle.zip"; + + clientOptInput + .opts(clientOpts) + .swagger(swagger); + + CodegenConfig codegenConfig = Codegen.getConfig(language); + if(codegenConfig == null) { + throw new BadRequestException(400, "Unsupported target " + language + " supplied"); + } + + codegenConfig.setOutputDir(outputFolder); + + Json.prettyPrint(clientOpts); + + clientOptInput.setConfig(codegenConfig); + + try{ + List files = new Codegen().opts(clientOptInput).generate(); + if(files.size() > 0) { + List filesToAdd = new ArrayList(); + filesToAdd.add(new File(outputFolder)); + ZipUtil zip = new ZipUtil(); + zip.compressFiles(filesToAdd, outputFilename); + } + else { + throw new BadRequestException(400, "A target generation was attempted, but no files were created!"); + } + } + catch (Exception e) { + throw new BadRequestException(500, "Unable to build target: " + e.getMessage()); + } + return outputFilename; } public static InputOption clientOptions(String language) { From 12365b9591ea1221a6ff51e7f4c7bf4592b5a747 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 12:43:01 -0800 Subject: [PATCH 06/32] removed cruft --- modules/swagger-generator/pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index 89653eb2da8..090f8029da7 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -200,10 +200,18 @@ jetty-deploy ${jetty-version} + + + org.scalatest + scalatest_2.11 + ${scala-test-version} + test + org.scala-lang scala-library ${scala-version} + test org.scala-lang @@ -228,6 +236,5 @@ 3.1.5 2.10.0 - 1.9 From 9a473ceae6c6b262bb237011e66dbe37812765e9 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 12:43:10 -0800 Subject: [PATCH 07/32] enabled url-only reading of specs --- .../wordnik/swagger/generator/online/Generator.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java index 05251b41f30..424d0d646ec 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java @@ -22,15 +22,22 @@ public class Generator { static Logger LOGGER = LoggerFactory.getLogger(Generator.class); public static String generateClient(String language, GeneratorInput opts) throws ApiException { + Swagger swagger; LOGGER.debug("generate client for " + language); if(opts == null) { throw new BadRequestException(400, "No options were supplied"); } JsonNode node = opts.getSpec(); if(node == null) { - throw new BadRequestException(400, "No swagger specification was supplied"); + if(opts.getSwaggerUrl() != null) { + swagger = new SwaggerParser().read(opts.getSwaggerUrl()); + } + else + throw new BadRequestException(400, "No swagger specification was supplied"); + } + else { + swagger = new SwaggerParser().read(node); } - Swagger swagger = new SwaggerParser().read(node); if(swagger == null) { throw new BadRequestException(400, "The swagger specification supplied was not valid"); } From 0307d3818aabe1e88baa5a3990b61c5f8927b8a9 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 12:59:31 -0800 Subject: [PATCH 08/32] added friendly download links --- .../swagger/generator/model/ResponseCode.java | 17 ++++++++++++----- .../generator/resource/SwaggerResource.java | 14 +++++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/model/ResponseCode.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/model/ResponseCode.java index 412da5aae1b..77271a6c72f 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/model/ResponseCode.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/model/ResponseCode.java @@ -2,18 +2,25 @@ package com.wordnik.swagger.generator.model; public class ResponseCode { private String code; + private String link; + public ResponseCode() {} + + public ResponseCode(String code, String link) { + setCode(code); + setLink(link); + } public String getCode() { return code; } - public void setCode(String code) { this.code = code; } - public ResponseCode() {} - - public ResponseCode(String code) { - setCode(code); + public String getLink() { + return link; + } + public void setLink(String link) { + this.link = link; } } \ No newline at end of file diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java index a57d800a665..2e3a480e115 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/resource/SwaggerResource.java @@ -34,8 +34,9 @@ public class SwaggerResource { @GET @Path("/download/{fileId}") - @Produces({"application/zip", "application/json"}) - @ApiOperation(value = "Downloads a pre-generated file", response = File.class) + @Produces({"application/zip"}) + @ApiOperation(value = "Downloads a pre-generated file", + response = String.class) public Response downloadFile(@PathParam("fileId") String fileId) throws Exception { Generated g = fileMap.get(fileId); System.out.println("looking for fileId " + fileId); @@ -57,7 +58,8 @@ public class SwaggerResource { @POST @Path("/clients/{language}") @Produces({"application/zip", "application/json"}) - @ApiOperation(value = "Generates a client library based on the config") + @ApiOperation( + value = "Generates a client library based on the config") public Response generateClient( @ApiParam(value = "The target language for the client library", allowableValues = "android,java,php,objc,docs", required = true) @PathParam("language") String language, @ApiParam(value = "Configuration for building the client library", required = true) GeneratorInput opts) throws Exception { @@ -71,7 +73,8 @@ public class SwaggerResource { g.setFriendlyName(language + "-client"); fileMap.put(code, g); System.out.println(code + ", " + filename); - return Response.ok().entity(new ResponseCode(code)).build(); + String link = "http://generator.swagger.io/api/gen/download/" + code; + return Response.ok().entity(new ResponseCode(code, link)).build(); } else { return Response.status(500).build(); @@ -120,7 +123,8 @@ public class SwaggerResource { g.setFriendlyName(framework + "-server"); fileMap.put(code, g); System.out.println(code + ", " + filename); - return Response.ok().entity(new ResponseCode(code)).build(); + String link = "http://generator.swagger.io/api/gen/download/" + code; + return Response.ok().entity(new ResponseCode(code, link)).build(); } else { return Response.status(500).build(); From fdd485608f6d855a2c2661540c5472c8bb7445f5 Mon Sep 17 00:00:00 2001 From: Mikhail Kreymerman Date: Tue, 17 Feb 2015 23:00:23 +0100 Subject: [PATCH 09/32] fixed StringIndexOutOfBoundsException on Windows --- .../wordnik/swagger/codegen/languages/PythonClientCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java index 801db74fe3c..f78e08b153b 100755 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java @@ -54,7 +54,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("swagger.mustache", module, "swagger.py")); supportingFiles.add(new SupportingFile("__init__.mustache", module, "__init__.py")); - supportingFiles.add(new SupportingFile("__init__.mustache", modelPackage.replaceAll("\\.", File.separator), "__init__.py")); + supportingFiles.add(new SupportingFile("__init__.mustache", modelPackage.replace('.', File.separatorChar), "__init__.py")); } @Override From 06164cdc514b58d6b83d1c19fb73b564e6fe4d43 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 15:04:06 -0800 Subject: [PATCH 10/32] updated file separator replacement --- .../swagger/codegen/languages/AndroidClientCodegen.java | 4 ++-- .../wordnik/swagger/codegen/languages/JavaClientCodegen.java | 4 ++-- .../wordnik/swagger/codegen/languages/PhpClientCodegen.java | 4 ++-- .../wordnik/swagger/codegen/languages/ScalaClientCodegen.java | 4 ++-- .../swagger/codegen/languages/ScalatraServerCodegen.java | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AndroidClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AndroidClientCodegen.java index e27da8b276b..915ff34c7f1 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AndroidClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AndroidClientCodegen.java @@ -71,11 +71,11 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi @Override public String apiFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); } @Override diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java index 6b201b449b0..1475db64bf6 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java @@ -80,11 +80,11 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String apiFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); } @Override diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PhpClientCodegen.java index 9682e28f847..e7768a2177d 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PhpClientCodegen.java @@ -69,11 +69,11 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String apiFileFolder() { - return outputFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + modelPackage().replace('.', File.separatorChar); } @Override diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalaClientCodegen.java index 39f2dfba694..85eeee98b9e 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalaClientCodegen.java @@ -106,11 +106,11 @@ public class ScalaClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); } @Override diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalatraServerCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalatraServerCodegen.java index 2670706f101..2434ca10ee1 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/ScalatraServerCodegen.java @@ -128,11 +128,11 @@ public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConf @Override public String apiFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + sourceFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); } @Override From 2550539495bd7d6431022dbc38e6e1915d4a06bb Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 18:54:57 -0800 Subject: [PATCH 11/32] added shade plugin to properly include service descriptions --- modules/swagger-codegen-distribution/pom.xml | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen-distribution/pom.xml b/modules/swagger-codegen-distribution/pom.xml index dc2a20f56a5..8b8ae9885c7 100644 --- a/modules/swagger-codegen-distribution/pom.xml +++ b/modules/swagger-codegen-distribution/pom.xml @@ -41,14 +41,21 @@ org.apache.maven.plugins - maven-jar-plugin - - - - com.wordnik.swagger.codegen.Codegen - - - + maven-shade-plugin + 2.3 + + + package + + shade + + + + + + + + From 9ae106affdaaedc92f761a1663fa674abb8dd4c1 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 21:37:51 -0800 Subject: [PATCH 12/32] rebuilt clients --- .../java/io/swagger/client/model/Pet.java | 2 +- .../java/io/swagger/client/ApiInvoker.java | 5 ++- .../java/io/swagger/client/model/Pet.java | 2 +- samples/client/petstore/objc/client/SWGPet.h | 2 +- .../client/petstore/tizen/client/SamiOrder.h | 4 +- .../client/petstore/tizen/client/SamiPet.h | 2 +- .../client/petstore/tizen/client/SamiUser.h | 2 +- .../dynamic-html/docs/assets/images/logo.png | Bin 25796 -> 25467 bytes samples/dynamic-html/docs/index.html | 38 +++++++++--------- .../src/main/java/io/swagger/model/Pet.java | 2 +- 10 files changed, 31 insertions(+), 28 deletions(-) diff --git a/samples/client/petstore/android-java/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/android-java/src/main/java/io/swagger/client/model/Pet.java index 22f198533bf..297e1360c70 100644 --- a/samples/client/petstore/android-java/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/android-java/src/main/java/io/swagger/client/model/Pet.java @@ -1,8 +1,8 @@ package io.swagger.client.model; import io.swagger.client.model.Category; -import java.util.*; import io.swagger.client.model.Tag; +import java.util.*; import com.wordnik.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java index 30f7e83c971..966a141c03d 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java @@ -51,8 +51,11 @@ public class ApiInvoker { } public static Object deserialize(String json, String containerType, Class cls) throws ApiException { + if(null != containerType) { + containerType = containerType.toLowerCase(); + } try{ - if("List".equals(containerType)) { + if("list".equals(containerType) || "array".equals(containerType)) { JavaType typeInfo = JsonUtil.getJsonMapper().getTypeFactory().constructCollectionType(List.class, cls); List response = (List) JsonUtil.getJsonMapper().readValue(json, typeInfo); return response; diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/src/main/java/io/swagger/client/model/Pet.java index 22f198533bf..297e1360c70 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/model/Pet.java @@ -1,8 +1,8 @@ package io.swagger.client.model; import io.swagger.client.model.Category; -import java.util.*; import io.swagger.client.model.Tag; +import java.util.*; import com.wordnik.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/samples/client/petstore/objc/client/SWGPet.h b/samples/client/petstore/objc/client/SWGPet.h index b6339cf127c..f16fa74cf1e 100644 --- a/samples/client/petstore/objc/client/SWGPet.h +++ b/samples/client/petstore/objc/client/SWGPet.h @@ -1,7 +1,7 @@ #import #import "SWGObject.h" -#import "SWGCategory.h" #import "SWGTag.h" +#import "SWGCategory.h" @interface SWGPet : SWGObject diff --git a/samples/client/petstore/tizen/client/SamiOrder.h b/samples/client/petstore/tizen/client/SamiOrder.h index d93510f48a9..88dcda67395 100644 --- a/samples/client/petstore/tizen/client/SamiOrder.h +++ b/samples/client/petstore/tizen/client/SamiOrder.h @@ -17,11 +17,11 @@ using namespace Tizen::Web::Json; -using Tizen::Base::Integer; using Tizen::Base::Long; +using Tizen::Base::DateTime; using Tizen::Base::String; using Tizen::Base::Boolean; -using Tizen::Base::DateTime; +using Tizen::Base::Integer; namespace Swagger { diff --git a/samples/client/petstore/tizen/client/SamiPet.h b/samples/client/petstore/tizen/client/SamiPet.h index b1f912bd912..9e3ab43bdc7 100644 --- a/samples/client/petstore/tizen/client/SamiPet.h +++ b/samples/client/petstore/tizen/client/SamiPet.h @@ -17,9 +17,9 @@ using namespace Tizen::Web::Json; +#include "SamiCategory.h" using Tizen::Base::Long; using Tizen::Base::String; -#include "SamiCategory.h" #include "SamiTag.h" using Tizen::Base::Collection::IList; diff --git a/samples/client/petstore/tizen/client/SamiUser.h b/samples/client/petstore/tizen/client/SamiUser.h index 585f52d4a02..dd24429dbab 100644 --- a/samples/client/petstore/tizen/client/SamiUser.h +++ b/samples/client/petstore/tizen/client/SamiUser.h @@ -17,9 +17,9 @@ using namespace Tizen::Web::Json; -using Tizen::Base::Integer; using Tizen::Base::Long; using Tizen::Base::String; +using Tizen::Base::Integer; namespace Swagger { diff --git a/samples/dynamic-html/docs/assets/images/logo.png b/samples/dynamic-html/docs/assets/images/logo.png index 9ad1ffa77ff9d3df5e56d35f683b9fa16adde4c9..7a217967d009167cd41969270ef075ab07d8d3c7 100644 GIT binary patch delta 393 zcmWMiPe{{o9Od)<=}=P1+-QvXra0*y5TqhT?j%w4 zE*fNXC_BmEU7OVi(IV&&ddYzx(Lw0qDKCEEy~}&=!{_n7?#bDXq^E>4vLMK*5NeHD z#EcaF81L~suZEdCyW(%tXW^TIY(C>9zZAWtE`>zdN4U&kJ~C^i|8kXZ$@)T2Xq)D; zEh#VU(_FOg3wtXHMLIZI`BZRJwaU3G7FFQ<_bH<>g*AtRUmQ;aoz-3@tIdKn=RtnG z_KNxVddy(X)o!q&ZpGlc#&t!1^F6`V&A(i4$qHg^*O+Rv2w%JX!eft3Aihr1us&b7 zfIi*dNllThD||U0%U_pr79Y`rlFaRhWXCNC!Pq&(q+JVx~tg;_SU> zz#SgLM)(J3`~DlaKd=k;;9DFHrZ5>v;AiAJHimXF6TN{~(Q=7!JNiJ-Fk)qBq)ZjX lZa+-uCPkXVSiW<@#N7j7U`z>n#HJ%=lfPCjw8D86yN6JB>!>KJcWQS|NUP>6ZwvEj`!&+g4<#%#x|4qRS>mJ<)0?PMm{&fxE8jTr3dnm-g&}~8W zV2qB|MnNFFYMWgVBiEbaM!2MTsy(iGzhg?%+x1BC#gR#YzxxOOc2@*%qiy^i4G1@T z62fS&CCKz8J;q!xbz!%8@VIZ9hx((6#aOQ*;%VWxqYuPsGy_f?iwR~DIc+za36rBf z*@{T=8J3d+ZZovw*qU!}L2)HDZhqjnSK~ywjJfnzUOo9o^kinSmbrt`>;$UW z&v=+yL@|H({~g@QTf5AfoW1I4{=C@t&`=06T=1))X$(q3*UlQ+$zK~{X!s|)imSr9 Wl1u0wsi=S6kE73Vshr1$GPeP)YT04{ diff --git a/samples/dynamic-html/docs/index.html b/samples/dynamic-html/docs/index.html index 1b7ba98febb..22ed5d50b68 100644 --- a/samples/dynamic-html/docs/index.html +++ b/samples/dynamic-html/docs/index.html @@ -58,25 +58,6 @@ -
-
- StoreApi -
- -
-
PetApi @@ -104,6 +85,25 @@
+
+
+ StoreApi +
+ +
+
diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Pet.java index 9596181628e..5a5cc2c8fb0 100644 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Pet.java @@ -1,8 +1,8 @@ package io.swagger.model; import io.swagger.model.Category; -import java.util.*; import io.swagger.model.Tag; +import java.util.*; import com.wordnik.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; From 686f3656c5066bde96426636ffd9ae4ee71c2c17 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 21:38:02 -0800 Subject: [PATCH 13/32] updated to new patch --- modules/swagger-codegen-distribution/pom.xml | 15 +++++++++++++-- modules/swagger-codegen/pom.xml | 4 ++-- modules/swagger-generator/pom.xml | 2 +- pom.xml | 4 ++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen-distribution/pom.xml b/modules/swagger-codegen-distribution/pom.xml index 8b8ae9885c7..57302b3f9ea 100644 --- a/modules/swagger-codegen-distribution/pom.xml +++ b/modules/swagger-codegen-distribution/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 2.1.1-M1-SNAPSHOT + 2.1.1-M1 ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen-distribution jar swagger-codegen (executable) - 2.1.1-M1-SNAPSHOT + 2.1.1-M1 src/test/scala target/classes @@ -19,6 +19,17 @@ target ${project.artifactId}-${project.version} + + org.apache.maven.plugins + maven-jar-plugin + + + + com.wordnik.swagger.codegen.Codegen + + + + org.apache.maven.plugins maven-shade-plugin diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index d2c7dc6aaa0..74f475883a8 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 2.1.1-M1-SNAPSHOT + 2.1.1-M1 ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen jar swagger-codegen (core library) - 2.1.1-M1-SNAPSHOT + 2.1.1-M1 src/main/java install diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index 090f8029da7..3fd03b13d48 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -3,7 +3,7 @@ com.wordnik swagger-codegen-project - 2.1.1-M1-SNAPSHOT + 2.1.1-M1 ../.. com.wordnik diff --git a/pom.xml b/pom.xml index da8232bb55d..2e1e00ae070 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ swagger-codegen-project pom swagger-codegen-project - 2.1.1-M1-SNAPSHOT + 2.1.1-M1 https://github.com/swagger-api/swagger-codegen scm:git:git@github.com:swagger-api/swagger-codegen.git @@ -347,7 +347,7 @@ - 1.0.0 + 1.0.1-SNAPSHOT 2.11.1 2.3.4 1.5.1-M1 From 3061cd82779b3b23a689433ed14b5576c7bc397d Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 21:41:36 -0800 Subject: [PATCH 14/32] put parser back to 1.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e1e00ae070..5a2ef0a5152 100644 --- a/pom.xml +++ b/pom.xml @@ -347,7 +347,7 @@ - 1.0.1-SNAPSHOT + 1.0.0 2.11.1 2.3.4 1.5.1-M1 From f89e04d21096d4a278141a78658eeef434bf954d Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 22:04:12 -0800 Subject: [PATCH 15/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 71c5e61ee98..20db54adb8c 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes ----------------------- | ------------ | -------------------------- | ----- -2.1.0-M1 | 2015-02-16 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen/tree/v2.1.0-M1) +2.1.1-M1 | 2015-02-17 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen/tree/v2.1.0-M1) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) 1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) From 784afee7b7622945442e2fbd01bad03d30a80441 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Feb 2015 22:06:25 -0800 Subject: [PATCH 16/32] prepare for next dev version --- README.md | 2 +- modules/swagger-codegen-distribution/pom.xml | 4 ++-- modules/swagger-codegen/pom.xml | 4 ++-- modules/swagger-generator/pom.xml | 2 +- pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 20db54adb8c..2021a91a074 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes ----------------------- | ------------ | -------------------------- | ----- -2.1.1-M1 | 2015-02-17 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen/tree/v2.1.0-M1) +2.1.2-M1-SNAPSHOT | 2015-02-17 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen/tree/v2.1.0-M1) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) 1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) diff --git a/modules/swagger-codegen-distribution/pom.xml b/modules/swagger-codegen-distribution/pom.xml index 57302b3f9ea..4d4bfa0dd01 100644 --- a/modules/swagger-codegen-distribution/pom.xml +++ b/modules/swagger-codegen-distribution/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 2.1.1-M1 + 2.1.2-M1-SNAPSHOT ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen-distribution jar swagger-codegen (executable) - 2.1.1-M1 + 2.1.2-M1-SNAPSHOT src/test/scala target/classes diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 74f475883a8..6b05505b925 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 2.1.1-M1 + 2.1.2-M1-SNAPSHOT ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen jar swagger-codegen (core library) - 2.1.1-M1 + 2.1.2-M1-SNAPSHOT src/main/java install diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index 3fd03b13d48..4eb22a019eb 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -3,7 +3,7 @@ com.wordnik swagger-codegen-project - 2.1.1-M1 + 2.1.2-M1-SNAPSHOT ../.. com.wordnik diff --git a/pom.xml b/pom.xml index 5a2ef0a5152..4e8af2e1e22 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ swagger-codegen-project pom swagger-codegen-project - 2.1.1-M1 + 2.1.2-M1-SNAPSHOT https://github.com/swagger-api/swagger-codegen scm:git:git@github.com:swagger-api/swagger-codegen.git From 4ce0a65ad56e072dcacaad5a875606266769b13a Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 22 Feb 2015 08:56:03 -0800 Subject: [PATCH 17/32] fix for #444, paths on windows --- .../com/wordnik/swagger/codegen/CodegenConfig.java | 1 + .../com/wordnik/swagger/codegen/DefaultCodegen.java | 13 +++++++++++-- .../wordnik/swagger/codegen/DefaultGenerator.java | 3 ++- .../codegen/languages/NodeJSServerCodegen.java | 4 ++-- .../codegen/languages/PythonClientCodegen.java | 4 ++-- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java index 940cde4deb9..235a9b5ba6b 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java @@ -18,6 +18,7 @@ public interface CodegenConfig { String modelFileFolder(); String modelPackage(); String toApiName(String name); + String toApiVarName(String name); String toModelName(String name); String toParamName(String name); String escapeReservedWord(String name); diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index 9d908aafb6f..014a595ae16 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.*; +import java.io.File; public class DefaultCodegen { Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); @@ -101,11 +102,11 @@ public class DefaultCodegen { } public String apiFileFolder() { - return outputFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + modelPackage().replace('.', File.separatorChar); } public Map additionalProperties() { @@ -133,6 +134,10 @@ public class DefaultCodegen { return initialCaps(name) + "Api"; } + public String toApiVarName(String name) { + return snakeCase(name); + } + public String toModelFilename(String name) { return name; } @@ -306,6 +311,10 @@ public class DefaultCodegen { return datatype; } + public String snakeCase(String name) { + return Character.toLowerCase(name.charAt(0)) + name.substring(1); + } + public String initialCaps(String name) { return Character.toUpperCase(name.charAt(0)) + name.substring(1); } diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java index 1a107463d7c..65355d75b1f 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java @@ -114,6 +114,7 @@ public class DefaultGenerator implements Generator { operation.put("modelPackage", config.modelPackage()); operation.putAll(config.additionalProperties()); operation.put("classname", config.toApiName(tag)); + operation.put("classVarName", config.toApiVarName(tag)); allOperations.add(operation); for(String templateName : config.apiTemplateFiles().keySet()) { String suffix = config.apiTemplateFiles().get(templateName); @@ -153,7 +154,7 @@ public class DefaultGenerator implements Generator { } bundle.put("apiInfo", apis); bundle.put("models", allModels); - bundle.put("apiFolder", config.apiPackage().replaceAll("\\.", "/")); + bundle.put("apiFolder", config.apiPackage().replace('.', File.separatorChar)); bundle.put("modelPackage", config.modelPackage()); if (swagger.getExternalDocs() != null) { bundle.put("externalDocs", swagger.getExternalDocs()); diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java index 8ae6e955b9c..74632b622fc 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java @@ -89,11 +89,11 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return outputFolder + File.separator + apiPackage().replaceAll("\\.", File.separator); + return outputFolder + File.separator + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + File.separator + modelPackage().replaceAll("\\.", File.separator); + return outputFolder + File.separator + modelPackage().replace('.', File.separatorChar); } @Override diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java index f78e08b153b..962f5ac0848 100755 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java @@ -64,11 +64,11 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return outputFolder + "/" + apiPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); } public String modelFileFolder() { - return outputFolder + "/" + modelPackage().replaceAll("\\.", "/"); + return outputFolder + "/" + modelPackage().replace('.', File.separatorChar); } @Override From 1c7c39c1abd0835e2ea27c48a0abeae732419ca6 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 22 Feb 2015 08:56:31 -0800 Subject: [PATCH 18/32] added logback --- .../src/main/resources/logback.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 modules/swagger-codegen-distribution/src/main/resources/logback.xml diff --git a/modules/swagger-codegen-distribution/src/main/resources/logback.xml b/modules/swagger-codegen-distribution/src/main/resources/logback.xml new file mode 100644 index 00000000000..4e86443d8d3 --- /dev/null +++ b/modules/swagger-codegen-distribution/src/main/resources/logback.xml @@ -0,0 +1,12 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + From bfc1ed3081282c73886eaebabdcadef49fa55b62 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 22 Feb 2015 08:57:40 -0800 Subject: [PATCH 19/32] added async scala generator #440 --- bin/Version.scala | 6 - bin/scala-async-petstore.sh | 36 ++++ .../languages/AsyncScalaClientCodegen.java | 194 ++++++++++++++++++ .../com.wordnik.swagger.codegen.CodegenConfig | 3 +- .../main/resources/asyncscala/api.mustache | 41 ++-- .../main/resources/asyncscala/client.mustache | 15 +- .../main/resources/asyncscala/model.mustache | 4 +- .../main/resources/asyncscala/sbt.mustache | 2 +- .../src/test/resources/2_0/postBodyTest.json | 4 +- modules/swagger-generator/sample.json | 2 +- .../swagger/generator/online/Generator.java | 14 +- samples/client/petstore/async-scala/build.sbt | 11 + .../io/swagger/client/SwaggerClient.scala | 27 +++ .../scala/io/swagger/client/api/PetApi.scala | 193 +++++++++++++++++ .../io/swagger/client/api/StoreApi.scala | 99 +++++++++ .../scala/io/swagger/client/api/UserApi.scala | 188 +++++++++++++++++ .../io/swagger/client/model/Category.scala | 10 + .../scala/io/swagger/client/model/Order.scala | 14 ++ .../scala/io/swagger/client/model/Pet.scala | 14 ++ .../scala/io/swagger/client/model/Tag.scala | 10 + .../scala/io/swagger/client/model/User.scala | 16 ++ 21 files changed, 851 insertions(+), 52 deletions(-) delete mode 100644 bin/Version.scala create mode 100755 bin/scala-async-petstore.sh create mode 100644 modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AsyncScalaClientCodegen.java create mode 100644 samples/client/petstore/async-scala/build.sbt create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/SwaggerClient.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/PetApi.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/StoreApi.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/UserApi.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Category.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Order.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Pet.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Tag.scala create mode 100644 samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/User.scala diff --git a/bin/Version.scala b/bin/Version.scala deleted file mode 100644 index a269af18117..00000000000 --- a/bin/Version.scala +++ /dev/null @@ -1,6 +0,0 @@ -val version = scala.util.Properties.scalaPropOrElse("version.number", "unknown").toString match { - case s if s startsWith "2.10" => "2.10" - case s if s startsWith "2.11" => "2.11" - case e: String => e -} -println(version) diff --git a/bin/scala-async-petstore.sh b/bin/scala-async-petstore.sh new file mode 100755 index 00000000000..108f40f82e1 --- /dev/null +++ b/bin/scala-async-petstore.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +root=./modules/swagger-codegen-distribution/pom.xml + +# gets version of swagger-codegen +version=$(sed '//,/<\/project>/d;//!d;s/ *<\/\?version> *//g' $root | sed -n '2p' | sed -e 's,.*\([^<]*\).*,\1,g') + +executable="./modules/swagger-codegen-distribution/target/swagger-codegen-distribution-$version.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l async-scala -o samples/client/petstore/async-scala" + +java $JAVA_OPTS -jar $executable $ags diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AsyncScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AsyncScalaClientCodegen.java new file mode 100644 index 00000000000..19b9e0f2c76 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/AsyncScalaClientCodegen.java @@ -0,0 +1,194 @@ +package com.wordnik.swagger.codegen.languages; + +import com.wordnik.swagger.codegen.*; +import com.wordnik.swagger.models.properties.*; + +import java.util.*; +import java.io.File; + +public class AsyncScalaClientCodegen extends DefaultCodegen implements CodegenConfig { + protected String invokerPackage = "io.swagger.client"; + protected String groupId = "com.wordnik"; + protected String artifactId = "swagger-client"; + protected String artifactVersion = "1.0.0"; + protected String sourceFolder = "src/main/scala"; + protected String clientName = "SwaggerClient"; + protected String authScheme = ""; + protected boolean authPreemptive = false; + protected boolean asyncHttpClient = !authScheme.isEmpty(); + + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + public String getName() { + return "async-scala"; + } + + public String getHelp() { + return "Generates an Asynchronous Scala client library."; + } + + public AsyncScalaClientCodegen() { + super(); + outputFolder = "generated-code/async-scala"; + modelTemplateFiles.put("model.mustache", ".scala"); + apiTemplateFiles.put("api.mustache", ".scala"); + templateDir = "asyncscala"; + apiPackage = "io.swagger.client.api"; + modelPackage = "io.swagger.client.model"; + + reservedWords = new HashSet ( + Arrays.asList( + "abstract", "case", "catch", "class", "def", "do", "else", "extends", + "false", "final", "finally", "for", "forSome", "if", "implicit", + "import", "lazy", "match", "new", "null", "object", "override", "package", + "private", "protected", "return", "sealed", "super", "this", "throw", + "trait", "try", "true", "type", "val", "var", "while", "with", "yield") + ); + + additionalProperties.put("invokerPackage", invokerPackage); + additionalProperties.put("groupId", groupId); + additionalProperties.put("artifactId", artifactId); + additionalProperties.put("artifactVersion", artifactVersion); + additionalProperties.put("asyncHttpClient", asyncHttpClient); + additionalProperties.put("authScheme", authScheme); + additionalProperties.put("authPreemptive", authPreemptive); + additionalProperties.put("clientName", clientName); + + supportingFiles.add(new SupportingFile("sbt.mustache", "", "build.sbt")); + supportingFiles.add(new SupportingFile("client.mustache", + (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), clientName + ".scala")); + + importMapping.remove("List"); + importMapping.remove("Set"); + importMapping.remove("Map"); + + importMapping.put("DateTime", "org.joda.time.DateTime"); + importMapping.put("ListBuffer", "scala.collections.mutable.ListBuffer"); + + typeMapping = new HashMap(); + typeMapping.put("enum", "NSString"); + typeMapping.put("array", "List"); + typeMapping.put("set", "Set"); + typeMapping.put("boolean", "Boolean"); + typeMapping.put("string", "String"); + typeMapping.put("int", "Int"); + typeMapping.put("long", "Long"); + typeMapping.put("float", "Float"); + typeMapping.put("byte", "Byte"); + typeMapping.put("short", "Short"); + typeMapping.put("char", "Char"); + typeMapping.put("long", "Long"); + typeMapping.put("double", "Double"); + typeMapping.put("object", "Any"); + typeMapping.put("file", "File"); + + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "String", + "boolean", + "Boolean", + "Double", + "Int", + "Long", + "Float", + "Object", + "List", + "Map") + ); + instantiationTypes.put("array", "ListBuffer"); + instantiationTypes.put("map", "HashMap"); + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } + + @Override + public String apiFileFolder() { + return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); + } + + public String modelFileFolder() { + return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); + } + + @Override + public String getTypeDeclaration(Property p) { + if(p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return getSwaggerType(p) + "[" + getTypeDeclaration(inner) + "]"; + } + else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + + return getSwaggerType(p) + "[String, " + getTypeDeclaration(inner) + "]"; + } + return super.getTypeDeclaration(p); + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type = null; + if(typeMapping.containsKey(swaggerType)) { + type = typeMapping.get(swaggerType); + if(languageSpecificPrimitives.contains(type)) + return toModelName(type); + } + else + type = swaggerType; + return toModelName(type); + } + + @Override + public String toInstantiationType(Property p) { + if (p instanceof MapProperty) { + MapProperty ap = (MapProperty) p; + String inner = getSwaggerType(ap.getAdditionalProperties()); + return instantiationTypes.get("map") + "[String, " + inner + "]"; + } + else if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + String inner = getSwaggerType(ap.getItems()); + return instantiationTypes.get("array") + "[" + inner + "]"; + } + else + return null; + } + + public String toDefaultValue(Property p) { + if(p instanceof StringProperty) + return "null"; + else if (p instanceof BooleanProperty) + return "null"; + else if(p instanceof DateProperty) + return "null"; + else if(p instanceof DateTimeProperty) + return "null"; + else if (p instanceof DoubleProperty) + return "null"; + else if (p instanceof FloatProperty) + return "null"; + else if (p instanceof IntegerProperty) + return "null"; + else if (p instanceof LongProperty) + return "null"; + else if (p instanceof MapProperty) { + MapProperty ap = (MapProperty) p; + String inner = getSwaggerType(ap.getAdditionalProperties()); + return "new HashMap[String, " + inner + "]() "; + } + else if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + String inner = getSwaggerType(ap.getItems()); + return "new ListBuffer[" + inner + "]() "; + } + else + return "null"; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig index 3f8102a750d..bc7554b95f0 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig @@ -1,4 +1,5 @@ com.wordnik.swagger.codegen.languages.AndroidClientCodegen +com.wordnik.swagger.codegen.languages.AsyncScalaClientCodegen com.wordnik.swagger.codegen.languages.JavaClientCodegen com.wordnik.swagger.codegen.languages.JaxRSServerCodegen com.wordnik.swagger.codegen.languages.NodeJSServerCodegen @@ -10,4 +11,4 @@ com.wordnik.swagger.codegen.languages.StaticHtmlGenerator com.wordnik.swagger.codegen.languages.SwaggerGenerator com.wordnik.swagger.codegen.languages.TizenClientCodegen com.wordnik.swagger.codegen.languages.PhpClientCodegen -com.wordnik.swagger.codegen.languages.PythonClientCodegen \ No newline at end of file +com.wordnik.swagger.codegen.languages.PythonClientCodegen diff --git a/modules/swagger-codegen/src/main/resources/asyncscala/api.mustache b/modules/swagger-codegen/src/main/resources/asyncscala/api.mustache index 2a8664450d5..603676e22bc 100644 --- a/modules/swagger-codegen/src/main/resources/asyncscala/api.mustache +++ b/modules/swagger-codegen/src/main/resources/asyncscala/api.mustache @@ -8,46 +8,31 @@ import scala.concurrent.duration._ import collection.mutable {{#operations}} -class {{className}}(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { +class {{classname}}(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { {{#operation}} - - def {{nickname}}({{#allParams}} - {{#optional}} - {{paramName}}: Option[{{dataType}}] = {{#defaultValue}}Some({{defaultValue}}){{/defaultValue}}{{^defaultValue}}None{{/defaultValue}}{{#hasMore}}, {{/hasMore}} - {{/optional}} - {{^optional}} - {{paramName}}: {{dataType}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}} - {{/optional}}{{/allParams}})(implicit reader: ClientResponseReader[{{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}]{{#bodyParams}}, writer: RequestWriter[{{dataType}}]{{/bodyParams}}){{#returnType}}: Future[{{returnType}}]{{/returnType}}{{^returnType}}: Future[Unit]{{/returnType}} = { + def {{nickname}}({{#allParams}}{{#optional}}{{paramName}}: Option[{{dataType}}] = {{#defaultValue}}Some({{defaultValue}}){{/defaultValue}}{{^defaultValue}}None{{/defaultValue}}{{#hasMore}}, + {{/hasMore}} + {{/optional}}{{^optional}}{{paramName}}: {{dataType}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#hasMore}}, + {{/hasMore}}{{/optional}}{{/allParams}})(implicit reader: ClientResponseReader[{{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}]{{#bodyParams}}, writer: RequestWriter[{{dataType}}]{{/bodyParams}}){{#returnType}}: Future[{{returnType}}]{{/returnType}}{{^returnType}}: Future[Unit]{{/returnType}} = { // create path and map variables - val path = - (addFmt("{{path}}"){{#pathParams}} - replaceAll ("\\{" + "{{baseName}}" + "\\}",{{paramName}}.toString) - {{/pathParams}}) + val path = (addFmt("{{path}}"){{#pathParams}} + replaceAll ("\\{" + "{{baseName}}" + "\\}",{{paramName}}.toString){{/pathParams}}) // query params val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - {{#requiredParamCount}} - // verify required params are set + {{#requiredParamCount}}// verify required params are set val paramCount = (Set[Any]({{/requiredParamCount}}{{#requiredParams}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/requiredParams}}{{#requiredParamCount}}) - null).size - if (paramCount != {{requiredParamCount}}) sys.error("missing required params") - {{/requiredParamCount}} + if (paramCount != {{requiredParamCount}}) sys.error("missing required params"){{/requiredParamCount}} - {{#queryParams}} - {{#optional}} - if({{paramName}} != null) {{paramName}}.foreach { v => queryParams += "{{baseName}}" -> v.toString } - {{/optional}} - {{^optional}} - if({{paramName}} != null) queryParams += "{{baseName}}" -> {{paramName}}.toString - {{/optional}} - {{/queryParams}} + {{#queryParams}}{{#optional}}if({{paramName}} != null) {{paramName}}.foreach { v => queryParams += "{{baseName}}" -> v.toString }{{/optional}}{{^optional}} + if({{paramName}} != null) queryParams += "{{baseName}}" -> {{paramName}}.toString{{/optional}}{{/queryParams}} - {{#headerParams}}headerParams += "{{baseName}}" -> {{paramName}}.toString - {{/headerParams}} + {{#headerParams}}headerParams += "{{baseName}}" -> {{paramName}}.toString{{/headerParams}} - val resFuture = client.submit("{{httpMethod}}", path, queryParams.toMap, headerParams.toMap, {{#bodyParam}}writer.write({{bodyParam}}){{/bodyParam}}{{^bodyParam}}"{{emptyBodyParam}}"{{/bodyParam}}) + val resFuture = client.submit("{{httpMethod}}", path, queryParams.toMap, headerParams.toMap, {{#bodyParam}}writer.write({{paramName}}){{/bodyParam}}{{^bodyParam}}"{{emptyBodyParam}}"{{/bodyParam}}) resFuture flatMap { resp => process(reader.read(resp)) } diff --git a/modules/swagger-codegen/src/main/resources/asyncscala/client.mustache b/modules/swagger-codegen/src/main/resources/asyncscala/client.mustache index d652ab07a94..ea7efa354cb 100644 --- a/modules/swagger-codegen/src/main/resources/asyncscala/client.mustache +++ b/modules/swagger-codegen/src/main/resources/asyncscala/client.mustache @@ -1,9 +1,11 @@ -package {{package}} +package {{invokerPackage}} {{#imports}}import {{import}} {{/imports}} +import {{apiPackage}}._ + import com.wordnik.swagger.client._ -import apis._ + import java.io.Closeable class {{clientName}}(config: SwaggerConfig) extends Closeable { @@ -13,12 +15,9 @@ class {{clientName}}(config: SwaggerConfig) extends Closeable { private[this] val client = transportClient protected def transportClient: TransportClient = new RestClient(config) - - {{#apiInfo}} - {{#apis}} - val {{name}} = new {{className}}(client, config) - {{/apis}} - {{/apiInfo}} + {{#apiInfo}}{{#apis}} + val {{classVarName}} = new {{classname}}(client, config) + {{/apis}}{{/apiInfo}} def close() { client.close() diff --git a/modules/swagger-codegen/src/main/resources/asyncscala/model.mustache b/modules/swagger-codegen/src/main/resources/asyncscala/model.mustache index 3892f28302e..b0da2825b32 100644 --- a/modules/swagger-codegen/src/main/resources/asyncscala/model.mustache +++ b/modules/swagger-codegen/src/main/resources/asyncscala/model.mustache @@ -6,9 +6,7 @@ import org.joda.time.DateTime {{#model}} case class {{classname}} ( - {{#vars}} - - {{name}}: {{#isNotRequired}}Option[{{/isNotRequired}}{{datatype}}{{#isNotRequired}}]{{/isNotRequired}} {{#hasMore}},{{/hasMore}}{{#description}} // {{description}}{{/description}}{{newline}} + {{#vars}}{{name}}: {{#isNotRequired}}Option[{{/isNotRequired}}{{datatype}}{{#isNotRequired}}]{{/isNotRequired}}{{#hasMore}},{{/hasMore}}{{#description}} // {{description}}{{/description}} {{/vars}} ) {{/model}} diff --git a/modules/swagger-codegen/src/main/resources/asyncscala/sbt.mustache b/modules/swagger-codegen/src/main/resources/asyncscala/sbt.mustache index 86d4779456a..6264f46b12e 100644 --- a/modules/swagger-codegen/src/main/resources/asyncscala/sbt.mustache +++ b/modules/swagger-codegen/src/main/resources/asyncscala/sbt.mustache @@ -2,7 +2,7 @@ organization := "{{package}}" name := "{{projectName}}-client" -libraryDependencies += "com.wordnik.swagger" %% "swagger-async-httpclient" % "0.3.0-WN5" +libraryDependencies += "com.wordnik.swagger" %% "swagger-async-httpclient" % "0.3.5" libraryDependencies += "joda-time" % "joda-time" % "2.3" diff --git a/modules/swagger-codegen/src/test/resources/2_0/postBodyTest.json b/modules/swagger-codegen/src/test/resources/2_0/postBodyTest.json index ed13a5820eb..e2a917c6744 100644 --- a/modules/swagger-codegen/src/test/resources/2_0/postBodyTest.json +++ b/modules/swagger-codegen/src/test/resources/2_0/postBodyTest.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "description": "This is a sample server Petstore server. You can find out more about Swagger at http://swagger.wordnik.com or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters", + "description": "This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters", "version": "1.0.0", "title": "Swagger Petstore", "termsOfService": "http://helloreverb.com/terms/", @@ -13,7 +13,7 @@ "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, - "host": "petstore.swagger.wordnik.com", + "host": "petstore.swagger.io", "basePath": "/v2", "schemes": [ "http" diff --git a/modules/swagger-generator/sample.json b/modules/swagger-generator/sample.json index 81963eb85fc..463b7006ec2 100644 --- a/modules/swagger-generator/sample.json +++ b/modules/swagger-generator/sample.json @@ -14,7 +14,7 @@ "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT" } }, - "host": "petstore.swagger.wordnik.com", + "host": "petstore.swagger.io", "basePath": "/api", "paths": { "/pet": { diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java index 424d0d646ec..6bbbfec4f7b 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/online/Generator.java @@ -82,14 +82,24 @@ public class Generator { public static String generateServer(String language, GeneratorInput opts) throws ApiException { LOGGER.debug("generate server for " + language); + Swagger swagger; + if(opts == null) { + throw new BadRequestException(400, "No options were supplied"); + } if(opts == null) { throw new BadRequestException(400, "No options were supplied"); } JsonNode node = opts.getSpec(); if(node == null) { - throw new BadRequestException(400, "No swagger specification was supplied"); + if(opts.getSwaggerUrl() != null) { + swagger = new SwaggerParser().read(opts.getSwaggerUrl()); + } + else + throw new BadRequestException(400, "No swagger specification was supplied"); + } + else { + swagger = new SwaggerParser().read(node); } - Swagger swagger = new SwaggerParser().read(node); if(swagger == null) { throw new BadRequestException(400, "The swagger specification supplied was not valid"); } diff --git a/samples/client/petstore/async-scala/build.sbt b/samples/client/petstore/async-scala/build.sbt new file mode 100644 index 00000000000..43a13d0af07 --- /dev/null +++ b/samples/client/petstore/async-scala/build.sbt @@ -0,0 +1,11 @@ +organization := "" + +name := "-client" + +libraryDependencies += "com.wordnik.swagger" %% "swagger-async-httpclient" % "0.3.5" + +libraryDependencies += "joda-time" % "joda-time" % "2.3" + +libraryDependencies += "org.joda" % "joda-convert" % "1.3.1" + +libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.0.13" % "provided" diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/SwaggerClient.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/SwaggerClient.scala new file mode 100644 index 00000000000..94b3d65f3df --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/SwaggerClient.scala @@ -0,0 +1,27 @@ +package io.swagger.client + +import io.swagger.client.api._ + +import com.wordnik.swagger.client._ + +import java.io.Closeable + +class SwaggerClient(config: SwaggerConfig) extends Closeable { + val locator = config.locator + val name = config.name + + private[this] val client = transportClient + + protected def transportClient: TransportClient = new RestClient(config) + + val user = new UserApi(client, config) + + val pet = new PetApi(client, config) + + val store = new StoreApi(client, config) + + + def close() { + client.close() + } +} \ No newline at end of file diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/PetApi.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/PetApi.scala new file mode 100644 index 00000000000..3ac13f724dc --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/PetApi.scala @@ -0,0 +1,193 @@ +package io.swagger.client.api + +import io.swagger.client.model.Pet +import java.io.File +import com.wordnik.swagger.client._ +import scala.concurrent.{ Future, Await } +import scala.concurrent.duration._ +import collection.mutable + +class PetApi(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { + + + def updatePet(body: Pet)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[Pet]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/pet")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("PUT", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def addPet(body: Pet)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[Pet]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/pet")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def findPetsByStatus(status: List[String])(implicit reader: ClientResponseReader[List[Pet]]): Future[List[Pet]] = { + // create path and map variables + val path = (addFmt("/pet/findByStatus")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + if(status != null) queryParams += "status" -> status.toString + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def findPetsByTags(tags: List[String])(implicit reader: ClientResponseReader[List[Pet]]): Future[List[Pet]] = { + // create path and map variables + val path = (addFmt("/pet/findByTags")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + if(tags != null) queryParams += "tags" -> tags.toString + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def getPetById(petId: Long)(implicit reader: ClientResponseReader[Pet]): Future[Pet] = { + // create path and map variables + val path = (addFmt("/pet/{petId}") + replaceAll ("\\{" + "petId" + "\\}",petId.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def updatePetWithForm(petId: String, + name: String, + status: String)(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/pet/{petId}") + replaceAll ("\\{" + "petId" + "\\}",petId.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def deletePet(api_key: String, + petId: Long)(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/pet/{petId}") + replaceAll ("\\{" + "petId" + "\\}",petId.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + headerParams += "api_key" -> api_key.toString + + val resFuture = client.submit("DELETE", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def uploadFile(petId: Long, + additionalMetadata: String, + file: File)(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/pet/{petId}/uploadImage") + replaceAll ("\\{" + "petId" + "\\}",petId.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + +} diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/StoreApi.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/StoreApi.scala new file mode 100644 index 00000000000..60011e73b6d --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/StoreApi.scala @@ -0,0 +1,99 @@ +package io.swagger.client.api + +import io.swagger.client.model.Order +import com.wordnik.swagger.client._ +import scala.concurrent.{ Future, Await } +import scala.concurrent.duration._ +import collection.mutable + +class StoreApi(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { + + + def getInventory()(implicit reader: ClientResponseReader[Map[String, Integer]]): Future[Map[String, Integer]] = { + // create path and map variables + val path = (addFmt("/store/inventory")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def placeOrder(body: Order)(implicit reader: ClientResponseReader[Order], writer: RequestWriter[Order]): Future[Order] = { + // create path and map variables + val path = (addFmt("/store/order")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def getOrderById(orderId: String)(implicit reader: ClientResponseReader[Order]): Future[Order] = { + // create path and map variables + val path = (addFmt("/store/order/{orderId}") + replaceAll ("\\{" + "orderId" + "\\}",orderId.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def deleteOrder(orderId: String)(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/store/order/{orderId}") + replaceAll ("\\{" + "orderId" + "\\}",orderId.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("DELETE", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + +} diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/UserApi.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/UserApi.scala new file mode 100644 index 00000000000..778d1cae177 --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/api/UserApi.scala @@ -0,0 +1,188 @@ +package io.swagger.client.api + +import io.swagger.client.model.User +import com.wordnik.swagger.client._ +import scala.concurrent.{ Future, Await } +import scala.concurrent.duration._ +import collection.mutable + +class UserApi(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { + + + def createUser(body: User)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[User]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/user")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def createUsersWithArrayInput(body: List[User])(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[List[User]]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/user/createWithArray")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def createUsersWithListInput(body: List[User])(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[List[User]]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/user/createWithList")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def loginUser(username: String, + password: String)(implicit reader: ClientResponseReader[String]): Future[String] = { + // create path and map variables + val path = (addFmt("/user/login")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + if(username != null) queryParams += "username" -> username.toString + if(password != null) queryParams += "password" -> password.toString + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def logoutUser()(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/user/logout")) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def getUserByName(username: String)(implicit reader: ClientResponseReader[User]): Future[User] = { + // create path and map variables + val path = (addFmt("/user/{username}") + replaceAll ("\\{" + "username" + "\\}",username.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("GET", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def updateUser(username: String, + body: User)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[User]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/user/{username}") + replaceAll ("\\{" + "username" + "\\}",username.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("PUT", path, queryParams.toMap, headerParams.toMap, writer.write(body)) + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + def deleteUser(username: String)(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + // create path and map variables + val path = (addFmt("/user/{username}") + replaceAll ("\\{" + "username" + "\\}",username.toString)) + + // query params + val queryParams = new mutable.HashMap[String, String] + val headerParams = new mutable.HashMap[String, String] + + + + + + + + val resFuture = client.submit("DELETE", path, queryParams.toMap, headerParams.toMap, "") + resFuture flatMap { resp => + process(reader.read(resp)) + } + } + + + +} diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Category.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Category.scala new file mode 100644 index 00000000000..1b410e7c59e --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Category.scala @@ -0,0 +1,10 @@ +package io.swagger.client.model + +import org.joda.time.DateTime + + +case class Category ( + id: Long, + name: String + +) diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Order.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Order.scala new file mode 100644 index 00000000000..f7a10a44965 --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Order.scala @@ -0,0 +1,14 @@ +package io.swagger.client.model + +import org.joda.time.DateTime + + +case class Order ( + id: Long, + petId: Long, + quantity: Integer, + shipDate: DateTime, + status: String, // Order Status + complete: Boolean + +) diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Pet.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Pet.scala new file mode 100644 index 00000000000..7e76c72914b --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Pet.scala @@ -0,0 +1,14 @@ +package io.swagger.client.model + +import org.joda.time.DateTime + + +case class Pet ( + id: Long, + category: Category, + name: String, + photoUrls: List[String], + tags: List[Tag], + status: String // pet status in the store + +) diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Tag.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Tag.scala new file mode 100644 index 00000000000..9dfe60d36f8 --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/Tag.scala @@ -0,0 +1,10 @@ +package io.swagger.client.model + +import org.joda.time.DateTime + + +case class Tag ( + id: Long, + name: String + +) diff --git a/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/User.scala b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/User.scala new file mode 100644 index 00000000000..598adae451a --- /dev/null +++ b/samples/client/petstore/async-scala/src/main/scala/io/swagger/client/model/User.scala @@ -0,0 +1,16 @@ +package io.swagger.client.model + +import org.joda.time.DateTime + + +case class User ( + id: Long, + username: String, + firstName: String, + lastName: String, + email: String, + password: String, + phone: String, + userStatus: Integer // User Status + +) From 5c31d68feed21387eca17abe6d9b4647b048179a Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 23 Feb 2015 22:42:45 -0800 Subject: [PATCH 20/32] updated to add resolve flag --- .../src/main/java/com/wordnik/swagger/codegen/Codegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java index 6f46a65155c..ac3a856624c 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java @@ -84,7 +84,7 @@ public class Codegen extends DefaultGenerator { return; } if (cmd.hasOption("i")) - swagger = new SwaggerParser().read(cmd.getOptionValue("i"), clientOptInput.getAuthorizationValues()); + swagger = new SwaggerParser().read(cmd.getOptionValue("i"), clientOptInput.getAuthorizationValues(), true); if (cmd.hasOption("t")) clientOpts.getProperties().put("templateDir", String.valueOf(cmd.getOptionValue("t"))); } From 4bd227271aad52f014fc29f069ab5a207ae3b277 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 23 Feb 2015 22:45:06 -0800 Subject: [PATCH 21/32] updated version --- README.md | 2 +- modules/swagger-codegen-distribution/pom.xml | 4 ++-- modules/swagger-codegen/pom.xml | 4 ++-- modules/swagger-generator/pom.xml | 2 +- .../src/test/scala/GeneratorInputTest.scala | 19 +++++++++++++++++++ pom.xml | 6 +++--- 6 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 modules/swagger-generator/src/test/scala/GeneratorInputTest.scala diff --git a/README.md b/README.md index 2021a91a074..63b7fa386b1 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes ----------------------- | ------------ | -------------------------- | ----- -2.1.2-M1-SNAPSHOT | 2015-02-17 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen/tree/v2.1.0-M1) +2.1.2-M1 | 2015-02-23 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) 1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) diff --git a/modules/swagger-codegen-distribution/pom.xml b/modules/swagger-codegen-distribution/pom.xml index 4d4bfa0dd01..a91d5d0cc8e 100644 --- a/modules/swagger-codegen-distribution/pom.xml +++ b/modules/swagger-codegen-distribution/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 2.1.2-M1-SNAPSHOT + 2.1.2-M1 ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen-distribution jar swagger-codegen (executable) - 2.1.2-M1-SNAPSHOT + 2.1.2-M1 src/test/scala target/classes diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 6b05505b925..a11e0a719d1 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 2.1.2-M1-SNAPSHOT + 2.1.2-M1 ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen jar swagger-codegen (core library) - 2.1.2-M1-SNAPSHOT + 2.1.2-M1 src/main/java install diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index 4eb22a019eb..653ea278617 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -3,7 +3,7 @@ com.wordnik swagger-codegen-project - 2.1.2-M1-SNAPSHOT + 2.1.2-M1 ../.. com.wordnik diff --git a/modules/swagger-generator/src/test/scala/GeneratorInputTest.scala b/modules/swagger-generator/src/test/scala/GeneratorInputTest.scala new file mode 100644 index 00000000000..b417ce322b6 --- /dev/null +++ b/modules/swagger-generator/src/test/scala/GeneratorInputTest.scala @@ -0,0 +1,19 @@ +import com.wordnik.swagger.online._ +import com.wordnik.swagger.generator.model._ +import com.wordnik.swagger.util.Json + +import org.junit.runner.RunWith +import org.scalatest.junit.JUnitRunner +import org.scalatest.FlatSpec +import org.scalatest.Matchers + +import scala.collection.JavaConverters._ + +@RunWith(classOf[JUnitRunner]) +class GeneratorInputTest extends FlatSpec with Matchers { + it should "write an object" in { + val obj = new GeneratorInput() + obj.setSwaggerUrl("http://petstore.swagger.io/v2/swagger.json") + Json.prettyPrint(obj) + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4e8af2e1e22..549fb183305 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ swagger-codegen-project pom swagger-codegen-project - 2.1.2-M1-SNAPSHOT + 2.1.2-M1 https://github.com/swagger-api/swagger-codegen scm:git:git@github.com:swagger-api/swagger-codegen.git @@ -347,10 +347,10 @@ - 1.0.0 + 1.0.1 2.11.1 2.3.4 - 1.5.1-M1 + 1.5.2-M1 2.1.4 2.3 1.2 From dfc8f7c60f32f04870351560c9eeba1b8a1b3f57 Mon Sep 17 00:00:00 2001 From: David Valdez Date: Thu, 26 Feb 2015 12:42:41 -0800 Subject: [PATCH 22/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63b7fa386b1..9520ccc6cce 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ public class MyObjcCodegen extends ObjcClientCodegen { and specify the `classname` when running the generator: ``` --i com.mycompany.swagger.codegen.MyObjcCodegen +-l com.mycompany.swagger.codegen.MyObjcCodegen ``` Your subclass will now be loaded and overrides the `PREFIX` value in the superclass. From a793d5c6ccc30a2aa30410dd9ca83eaeb00b67c3 Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 1 Mar 2015 14:13:08 -0500 Subject: [PATCH 23/32] Changed the --auth parameter to require a value so it is not ignored. --- .../src/main/java/com/wordnik/swagger/codegen/Codegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java index ac3a856624c..a438b460b92 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java @@ -44,7 +44,7 @@ public class Codegen extends DefaultGenerator { options.addOption("i", "input-spec", true, "location of the swagger spec, as URL or file"); options.addOption("t", "template-dir", true, "folder containing the template files"); options.addOption("d", "debug-info", false, "prints additional info for debugging"); - options.addOption("a", "auth", false, "addes authorization headers when fetching the swagger definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values"); + options.addOption("a", "auth", true, "addes authorization headers when fetching the swagger definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values"); ClientOptInput clientOptInput = new ClientOptInput(); ClientOpts clientOpts = new ClientOpts(); From dd0ccff58a49a8e5ce25c09b4c67f1519e6283a4 Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 1 Mar 2015 14:18:11 -0500 Subject: [PATCH 24/32] Minor typo in help text. --- .../src/main/java/com/wordnik/swagger/codegen/Codegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java index a438b460b92..082039fc1f4 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/Codegen.java @@ -44,7 +44,7 @@ public class Codegen extends DefaultGenerator { options.addOption("i", "input-spec", true, "location of the swagger spec, as URL or file"); options.addOption("t", "template-dir", true, "folder containing the template files"); options.addOption("d", "debug-info", false, "prints additional info for debugging"); - options.addOption("a", "auth", true, "addes authorization headers when fetching the swagger definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values"); + options.addOption("a", "auth", true, "adds authorization headers when fetching the swagger definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values"); ClientOptInput clientOptInput = new ClientOptInput(); ClientOpts clientOpts = new ClientOpts(); From 5c2c8e1d76783c6cd277d32bb2a677a3d18af1af Mon Sep 17 00:00:00 2001 From: yzats Date: Tue, 3 Mar 2015 12:42:15 -0800 Subject: [PATCH 25/32] Update README.md Fix spelling errors --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 63b7fa386b1..3f241562af0 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ The goal of Swaggerâ„¢ is to define a standard, language-agnostic interface to R Check out [Swagger-Spec](https://github.com/swagger-api/swagger-spec) for additional information about the Swagger project, including additional libraries with support for other languages and more. -## Compatability -The Swagger Specification has undergone 3 revisions since initial creation in 2010. The swagger-codegen project has the following compatibilies with the swagger specification: +## Compatibility +The Swagger Specification has undergone 3 revisions since initial creation in 2010. The swagger-codegen project has the following compatibilities with the swagger specification: Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes ----------------------- | ------------ | -------------------------- | ----- From 27c6af3491c3c2ebaec650614fcf8e672f2474a0 Mon Sep 17 00:00:00 2001 From: Ron Date: Sat, 7 Mar 2015 16:34:39 -0500 Subject: [PATCH 26/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f241562af0..ba1c690848a 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes ----------------------- | ------------ | -------------------------- | ----- -2.1.2-M1 | 2015-02-23 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen) +2.1.2-M1 (master) | 2015-02-23 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) 1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) From b6f7f85baa9724d4b29c816542d0afb9965977b0 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 9 Mar 2015 09:32:22 -0700 Subject: [PATCH 27/32] updated links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ba1c690848a..cf28a5c38de 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ You can build a client against the swagger sample [petstore](http://petstore.swa This will run the generator with this command: ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l java \ -o samples/client/petstore/java @@ -189,7 +189,7 @@ You can also use the codegen to generate a server for a couple different framewo ### node.js ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l nodejs \ -o samples/server/petstore/nodejs @@ -201,7 +201,7 @@ java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distributi ### scala scalatra ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l scalatra \ -o samples/server/petstore/scalatra @@ -210,7 +210,7 @@ java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distributi ### java jax-rs ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l jaxrs \ -o samples/server/petstore/jaxrs From b2cfb772226cdbb20ba5efe2c7cef022ad933a07 Mon Sep 17 00:00:00 2001 From: James Ebentier Date: Mon, 9 Mar 2015 18:18:20 -0700 Subject: [PATCH 28/32] Python: fixing an issue in swagger python code generation where attribute classes aren't respected --- .../swagger-codegen/src/main/resources/python/swagger.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/python/swagger.mustache b/modules/swagger-codegen/src/main/resources/python/swagger.mustache index 8d9053025d1..5a5a7058bdf 100644 --- a/modules/swagger-codegen/src/main/resources/python/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/python/swagger.mustache @@ -226,7 +226,7 @@ class ApiClient: subValues.append(self.deserialize(subValue, subClass)) setattr(instance, attr, subValues) else: - setattr(instance, attr, self.deserialize(value, objClass)) + setattr(instance, attr, self.deserialize(value, attrType)) return instance From 1887170dad90f475b44bb781671ffadb4192519f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 9 Mar 2015 09:32:22 -0700 Subject: [PATCH 29/32] updated links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ba1c690848a..cf28a5c38de 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ You can build a client against the swagger sample [petstore](http://petstore.swa This will run the generator with this command: ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l java \ -o samples/client/petstore/java @@ -189,7 +189,7 @@ You can also use the codegen to generate a server for a couple different framewo ### node.js ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l nodejs \ -o samples/server/petstore/nodejs @@ -201,7 +201,7 @@ java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distributi ### scala scalatra ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l scalatra \ -o samples/server/petstore/scalatra @@ -210,7 +210,7 @@ java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distributi ### java jax-rs ``` -java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.0-M1.jar \ +java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar \ -i http://petstore.swagger.io/v2/swagger.json \ -l jaxrs \ -o samples/server/petstore/jaxrs From 5b72653d7f1ce82ed26110571f1904cadd41fdd4 Mon Sep 17 00:00:00 2001 From: David Valdez Date: Thu, 26 Feb 2015 12:42:41 -0800 Subject: [PATCH 30/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf28a5c38de..a11f4e35f15 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ public class MyObjcCodegen extends ObjcClientCodegen { and specify the `classname` when running the generator: ``` --i com.mycompany.swagger.codegen.MyObjcCodegen +-l com.mycompany.swagger.codegen.MyObjcCodegen ``` Your subclass will now be loaded and overrides the `PREFIX` value in the superclass. From c1e45a593106115791a1e5534261984095cfb984 Mon Sep 17 00:00:00 2001 From: Jhonathan Wyterlin Date: Fri, 13 Mar 2015 10:35:59 -0300 Subject: [PATCH 31/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a11f4e35f15..2e2f0b8984a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Check out [Swagger-Spec](https://github.com/swagger-api/swagger-spec) for additi ## Compatibility The Swagger Specification has undergone 3 revisions since initial creation in 2010. The swagger-codegen project has the following compatibilities with the swagger specification: -Swagger Codegen Version | Release Date | Swagger Spec compatability | Notes +Swagger Codegen Version | Release Date | Swagger Spec compatibility | Notes ----------------------- | ------------ | -------------------------- | ----- 2.1.2-M1 (master) | 2015-02-23 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.0-M1](https://github.com/swagger-api/swagger-codegen) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) From b73340ab8339b72a407a0acb3d0d89fa7d4eed7e Mon Sep 17 00:00:00 2001 From: sosso Date: Tue, 17 Mar 2015 11:39:32 -0700 Subject: [PATCH 32/32] Java: properly add request headers https://jersey.java.net/nonav/apidocs/1.8/jersey/com/sun/jersey/api/client/PartialRequestBuilder.html#header(java.lang.String, java.lang.Object) We were running into issues with our headers not making it into our requests. Upon some research, it appears that Jersey's header() method returns the builder object, meaning we have to do this assignment to properly construct the request. After making the change, our requests work as expected. --- .../src/main/resources/Java/apiInvoker.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache index 26379c60105..c8bdfa2e3c2 100644 --- a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache @@ -106,12 +106,12 @@ public class ApiInvoker { Builder builder = client.resource(host + path + querystring).accept("application/json"); for(String key : headerParams.keySet()) { - builder.header(key, headerParams.get(key)); + builder = builder.header(key, headerParams.get(key)); } for(String key : defaultHeaderMap.keySet()) { if(!headerParams.containsKey(key)) { - builder.header(key, defaultHeaderMap.get(key)); + builder = builder.header(key, defaultHeaderMap.get(key)); } } ClientResponse response = null;