From dbecb9e562cd489c98e2fc223a4a6902181568a5 Mon Sep 17 00:00:00 2001 From: Fredric Dorothy Date: Mon, 28 Sep 2015 11:50:08 -0500 Subject: [PATCH 01/78] Added ability to set a configuration file for custom code generators. This should work the same as when you're using one of the built-in generators. --- .../main/java/io/swagger/codegen/Codegen.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/Codegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/Codegen.java index c99e04e54949..3b4ffecfe38f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/Codegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/Codegen.java @@ -1,5 +1,7 @@ package io.swagger.codegen; +import config.Config; +import config.ConfigParser; import io.swagger.models.Swagger; import io.swagger.parser.SwaggerParser; import org.apache.commons.cli.BasicParser; @@ -9,6 +11,7 @@ import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -41,6 +44,7 @@ public class Codegen extends DefaultGenerator { 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, "adds 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("c", "config", true, "location of the configuration file"); ClientOptInput clientOptInput = new ClientOptInput(); ClientOpts clientOpts = new ClientOpts(); @@ -84,6 +88,18 @@ public class Codegen extends DefaultGenerator { if (cmd.hasOption("i")) { swagger = new SwaggerParser().read(cmd.getOptionValue("i"), clientOptInput.getAuthorizationValues(), true); } + if (cmd.hasOption("c")) { + String configFile = cmd.getOptionValue("c"); + Config genConfig = ConfigParser.read(configFile); + config = clientOptInput.getConfig(); + if (null != genConfig && null != config) { + for (CliOption langCliOption : config.cliOptions()) { + if (genConfig.hasOption(langCliOption.getOpt())) { + config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt())); + } + } + } + } if (cmd.hasOption("t")) { clientOpts.getProperties().put("templateDir", String.valueOf(cmd.getOptionValue("t"))); } @@ -145,4 +161,4 @@ public class Codegen extends DefaultGenerator { configString = sb.toString(); } } -} \ No newline at end of file +} From 6cc17d8508c66e3d5b6f0a90388301319cb63ffa Mon Sep 17 00:00:00 2001 From: Nick Bruno Date: Wed, 14 Oct 2015 22:07:43 -0400 Subject: [PATCH 02/78] Add authorization scope data to CodegenSecurity, demo use in JAXRS --- .../io/swagger/codegen/CodegenOperation.java | 2 +- .../io/swagger/codegen/CodegenSecurity.java | 5 +++-- .../io/swagger/codegen/DefaultCodegen.java | 18 +++++++++++++++++- .../io/swagger/codegen/DefaultGenerator.java | 1 + .../src/main/resources/JavaJaxRS/api.mustache | 8 +++++++- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java index 373c5b2b7857..871b3f261c0f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java @@ -10,7 +10,7 @@ import java.util.Set; public class CodegenOperation { public final List responseHeaders = new ArrayList(); - public Boolean hasConsumes, hasProduces, hasParams, returnTypeIsPrimitive, + public Boolean hasAuthMethods, hasConsumes, hasProduces, hasParams, returnTypeIsPrimitive, returnSimpleType, subresourceOperation, isMapContainer, isListContainer, hasMore = Boolean.TRUE, isMultipart, isResponseBinary = Boolean.FALSE; public String path, operationId, returnType, httpMethod, returnBaseType, diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenSecurity.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenSecurity.java index edd65cc06034..101182063839 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenSecurity.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenSecurity.java @@ -1,6 +1,7 @@ package io.swagger.codegen; -import java.util.Set; +import java.util.List; +import java.util.Map; public class CodegenSecurity { public String name; @@ -11,5 +12,5 @@ public class CodegenSecurity { public Boolean isKeyInQuery, isKeyInHeader; // Oauth specific public String flow, authorizationUrl, tokenUrl; - public Set scopes; + public List> scopes; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 69d7cadbf0ad..021e6a6662da 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -1307,7 +1307,23 @@ public class DefaultCodegen { sec.authorizationUrl = oauth2Definition.getAuthorizationUrl(); sec.tokenUrl = oauth2Definition.getTokenUrl(); if (oauth2Definition.getScopes() != null) { - sec.scopes = oauth2Definition.getScopes().keySet(); + List> scopes = new ArrayList>(); + int count = 0, numScopes = oauth2Definition.getScopes().size(); + for(Map.Entry scopeEntry : oauth2Definition.getScopes().entrySet()) { + Map scope = new HashMap(); + scope.put("scope", scopeEntry.getKey()); + scope.put("description", scopeEntry.getValue()); + + count += 1; + if (count < numScopes) { + scope.put("hasMore", "true"); + } else { + scope.put("hasMore", null); + } + + scopes.add(scope); + } + sec.scopes = scopes; } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index a785f45bdf21..9fa1b28cad2b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -509,6 +509,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } if (!authMethods.isEmpty()) { co.authMethods = config.fromSecurity(authMethods); + co.hasAuthMethods = true; } } catch (Exception ex) { diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache index 65dfa6835bfd..8bd9b2ca1083 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache @@ -37,7 +37,13 @@ public class {{classname}} { {{#subresourceOperation}}@Path("{{path}}"){{/subresourceOperation}} {{#hasConsumes}}@Consumes({ {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}} {{#hasProduces}}@Produces({ {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}} - @io.swagger.annotations.ApiOperation(value = "{{{summary}}}", notes = "{{{notes}}}", response = {{{returnType}}}.class{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}) + @io.swagger.annotations.ApiOperation(value = "{{{summary}}}", notes = "{{{notes}}}", response = {{{returnType}}}.class{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}{{#hasAuthMethods}}, authorizations = { + {{#authMethods}}@io.swagger.annotations.Authorization(value = "{{name}}"{{#isOAuth}}, scopes = { + {{#scopes}}@io.swagger.annotations.AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{#hasMore}}, + {{/hasMore}}{{/scopes}} + }{{/isOAuth}}){{#hasMore}}, + {{/hasMore}}{{/authMethods}} + }{{/hasAuthMethods}}) @io.swagger.annotations.ApiResponses(value = { {{#responses}} @io.swagger.annotations.ApiResponse(code = {{{code}}}, message = "{{{message}}}", response = {{{returnType}}}.class{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}){{#hasMore}}, {{/hasMore}}{{/responses}} }) From 300a0dc82cca6901ff32b2c032cfc3105af3f12e Mon Sep 17 00:00:00 2001 From: Nick Bruno Date: Wed, 14 Oct 2015 22:50:58 -0400 Subject: [PATCH 03/78] Update retrofit library for changes to OAuth scope handling --- .../main/resources/Java/libraries/retrofit/ApiClient.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache index 4046f9f107ca..88f0734ce8df 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache @@ -54,7 +54,7 @@ public class ApiClient { if (authName == "{{name}}") { {{#isBasic}} auth = new HttpBasicAuth();{{/isBasic}}{{#isApiKey}} auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}");{{/isApiKey}}{{#isOAuth}} - auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{^-first}}, {{/-first}}{{this}}{{/scopes}}");{{/isOAuth}} + auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{scope}}{{#hasMore}}, {{/hasMore}}{{/scopes}}");{{/isOAuth}} } else {{/authMethods}}{ throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names"); } From 04369ddfcec8bb306d380db5b884d0faecf7b975 Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Thu, 15 Oct 2015 16:51:43 +0300 Subject: [PATCH 04/78] Form parameters has been added to the html template --- .../src/main/resources/htmlDocs/index.mustache | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache b/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache index ac07a3fd9f55..1eb907cb7181 100644 --- a/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache +++ b/modules/swagger-codegen/src/main/resources/htmlDocs/index.mustache @@ -87,6 +87,13 @@ {{/hasQueryParams}} + {{#hasFormParams}} +

Form parameters

+
+ {{#formParams}}{{>formParam}}{{/formParams}} +
+ {{/hasFormParams}} + diff --git a/modules/swagger-codegen/src/main/resources/htmlDocs/style.css.mustache b/modules/swagger-codegen/src/main/resources/htmlDocs/style.css.mustache index d69f0e7b1617..8d9a5755d7bb 100644 --- a/modules/swagger-codegen/src/main/resources/htmlDocs/style.css.mustache +++ b/modules/swagger-codegen/src/main/resources/htmlDocs/style.css.mustache @@ -124,6 +124,20 @@ code { font-style: italic; } +.param-enum-header { +width: 700px; +padding: 0 0 0 60px; +color: #777; +font-weight: bold; +} + +.param-enum { +width: 700px; +padding: 0 0 0 80px; +color: #777; +font-style: italic; +} + .field-label { padding: 0; margin: 0; diff --git a/modules/swagger-codegen/src/main/resources/swagger-static/assets/css/style.css b/modules/swagger-codegen/src/main/resources/swagger-static/assets/css/style.css index f14f6bdb62c5..b596c11a535f 100644 --- a/modules/swagger-codegen/src/main/resources/swagger-static/assets/css/style.css +++ b/modules/swagger-codegen/src/main/resources/swagger-static/assets/css/style.css @@ -100,6 +100,10 @@ float: left; } +.param-enum { + margin-left: 20px; +} + .section-header { border-bottom: 2px; font-weight: bold; diff --git a/modules/swagger-codegen/src/main/resources/swagger-static/model.mustache b/modules/swagger-codegen/src/main/resources/swagger-static/model.mustache index a9a39ab6e91c..e6f85872c766 100644 --- a/modules/swagger-codegen/src/main/resources/swagger-static/model.mustache +++ b/modules/swagger-codegen/src/main/resources/swagger-static/model.mustache @@ -5,7 +5,16 @@ {{#vars}}
  • {{name}} : {{datatype}} -
    {{description}} +
    {{description}} + {{#isEnum}} +
    +
    Enum: + {{#_enum}} +
    {{this}}
    + {{/_enum}} + +
    + {{/isEnum}}
{{/vars}} From 8339e4b092cdf53056c033cd933a1805c4df4b46 Mon Sep 17 00:00:00 2001 From: Tomek Cejner Date: Fri, 16 Oct 2015 14:09:55 +0200 Subject: [PATCH 06/78] Add default initializer to Swift model classes. --- modules/swagger-codegen/src/main/resources/swift/model.mustache | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/swift/model.mustache b/modules/swagger-codegen/src/main/resources/swift/model.mustache index a2510a26dd03..892a3a59f966 100644 --- a/modules/swagger-codegen/src/main/resources/swift/model.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/model.mustache @@ -21,6 +21,8 @@ public class {{classname}}: JSONEncodable { {{/description}}public var {{name}}: {{{datatype}}}{{^unwrapRequired}}?{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}} {{/vars}} + public init() {} + // MARK: JSONEncodable func encodeToJSON() -> AnyObject { var nillableDictionary = [String:AnyObject?](){{#vars}}{{#isNotContainer}}{{#isPrimitiveType}}{{^isEnum}} From 9ac980298f970670c378523de6088f4d57b4a084 Mon Sep 17 00:00:00 2001 From: Kosta Krauth Date: Fri, 16 Oct 2015 16:45:34 -0400 Subject: [PATCH 07/78] Fix syntax issue when no auth methods defined When no authentication methods are defined, the generated code does not compile due to where the authMethods closing tag is located. Moved the closing tag further down and opening tag further up so that the generated code is correct both when authentication are and aren't present. --- .../resources/Java/libraries/retrofit/ApiClient.mustache | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache index 4046f9f107ca..4df0fce7d893 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache @@ -49,16 +49,16 @@ public class ApiClient { for(String authName : authNames) { if (apiAuthorizations.containsKey(authName)) { throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations"); - } - Interceptor auth;{{#authMethods}} + }{{#authMethods}} + Interceptor auth; if (authName == "{{name}}") { {{#isBasic}} auth = new HttpBasicAuth();{{/isBasic}}{{#isApiKey}} auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}");{{/isApiKey}}{{#isOAuth}} auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{^-first}}, {{/-first}}{{this}}{{/scopes}}");{{/isOAuth}} - } else {{/authMethods}}{ + } else { throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names"); } - apiAuthorizations.put(authName, auth); + apiAuthorizations.put(authName, auth);{{/authMethods}} } addAuthsToOkClient(okClient); } From 9508579eed1346f728b395e047b06e9a323bea81 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 16 Oct 2015 18:21:06 -0700 Subject: [PATCH 08/78] added inline resolver --- .../swagger/codegen/InlineModelResolver.java | 183 ++++++++++++++++++ .../codegen/InlineModelResolverTest.java | 97 ++++++++++ 2 files changed, 280 insertions(+) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java new file mode 100644 index 000000000000..c285faf73bfe --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -0,0 +1,183 @@ +package io.swagger.codegen; + +import io.swagger.models.*; +import io.swagger.models.parameters.BodyParameter; +import io.swagger.models.parameters.Parameter; +import io.swagger.models.properties.ObjectProperty; +import io.swagger.models.properties.Property; +import io.swagger.models.properties.RefProperty; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class InlineModelResolver { + private Swagger swagger = null; + + Map addedModels = new HashMap(); + + public void flatten(Swagger swagger) { + this.swagger = swagger; + + // operations + Map paths = swagger.getPaths(); + Map models = swagger.getDefinitions(); + + if(paths != null) { + for(String pathname : paths.keySet()) { + Path path = paths.get(pathname); + + for(Operation operation: path.getOperations()) { + List parameters = operation.getParameters(); + + if(parameters != null) { + for(Parameter parameter : parameters) { + if(parameter instanceof BodyParameter) { + BodyParameter bp = (BodyParameter) parameter; + + if(bp.getSchema() != null) { + Model model = bp.getSchema(); + + if(model instanceof ModelImpl) { + String name = bp.getName(); + + if(models == null) { + models = new HashMap(); + swagger.setDefinitions(models); + } + else { + if (swagger.getDefinitions().containsKey(bp.getName())) { + name += "_" + "inline"; + } + } + swagger.addDefinition(name, model); + bp.setSchema(new RefModel(name)); + } + } + } + } + } + Map responses = operation.getResponses(); + if(responses != null) { + for(String key : responses.keySet()) { + Response response = responses.get(key); + if(response.getSchema() != null) { + Property property = response.getSchema(); + if(property instanceof ObjectProperty) { + String modelName = uniqueName("inline_response_" + key); + ObjectProperty op = (ObjectProperty) property; + Model model = modelFromProperty(op, modelName); + response.setSchema(new RefProperty(modelName)); + swagger.addDefinition(modelName, model); + } + } + } + } + } + } + } + + // definitions + if(models != null) { + List modelNames = new ArrayList(models.keySet()); + for(String modelName : modelNames) { + Model model = models.get(modelName); + if(model instanceof ModelImpl) { + ModelImpl m = (ModelImpl) model; + + Map properties = m.getProperties(); + flattenProperties(properties, modelName); + } + else if (model instanceof ArrayModel) { + ArrayModel m = (ArrayModel) model; + Property inner = m.getItems(); + if(inner instanceof ObjectProperty) { + String innerModelName = uniqueName(modelName + "_" + inner); + Model innerModel = modelFromProperty((ObjectProperty)inner, modelName); + swagger.addDefinition(innerModelName, innerModel); + m.setItems(new RefProperty(innerModelName)); + } + } + else if (model instanceof ComposedModel) { + ComposedModel m = (ComposedModel) model; + } + } + } + } + + public String uniqueName(String key) { + int count = 0; + boolean done = false; + while(!done) { + String name = key; + if(count > 0) { + name = key + "_" + count; + } + if(swagger.getDefinitions() == null) { + return name; + } + else if (!swagger.getDefinitions().containsKey(name)) { + return name; + } + count += 1; + } + return key; + } + + public void flattenProperties(Map properties, String path) { + if(properties == null) { + return; + } + Map propsToUpdate = new HashMap(); + Map modelsToAdd = new HashMap(); + for(String key : properties.keySet()) { + Property property = properties.get(key); + if(property instanceof ObjectProperty) { + String modelName = uniqueName(path + "_" + key); + ObjectProperty op = (ObjectProperty) property; + Model model = modelFromProperty(op, modelName); + + modelsToAdd.put(modelName, model); + propsToUpdate.put(key, new RefProperty(modelName)); + } + } + if(propsToUpdate.size() > 0) { + for(String key : propsToUpdate.keySet()) { + properties.put(key, propsToUpdate.get(key)); + } + } + for(String key : modelsToAdd.keySet()) { + swagger.addDefinition(key, modelsToAdd.get(key)); + this.addedModels.put(key, modelsToAdd.get(key)); + } + } + + public Model modelFromProperty(ObjectProperty object, String path) { + String access = object.getAccess(); + String description = object.getDescription(); + String example = object.getExample(); + String name = object.getName(); + Integer position = object.getPosition(); + Boolean readOnly = object.getReadOnly(); + Boolean required = object.getRequired(); + String title = object.getTitle(); + Map extensions = object.getVendorExtensions(); + Xml xml = object.getXml(); + + Map properties = object.getProperties(); + + ModelImpl model = new ModelImpl(); + model.setDescription(description); + model.setExample(example); + model.setName(name); + model.setXml(xml); + + if(properties != null) { + flattenProperties(properties, path); + model.setProperties(properties); + } + + return model; + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java new file mode 100644 index 000000000000..e922e0d6e2fa --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -0,0 +1,97 @@ +package io.swagger.codegen; + + +import io.swagger.models.*; +import io.swagger.models.parameters.BodyParameter; +import io.swagger.models.parameters.Parameter; +import io.swagger.models.properties.ObjectProperty; +import io.swagger.models.properties.StringProperty; +import io.swagger.util.Json; +import org.junit.Test; + +public class InlineModelResolverTest { + @Test + public void resolveInlineModelTest() throws Exception { + Swagger swagger = new Swagger(); + + swagger.addDefinition("User", new ModelImpl() + .name("user") + .description("a common user") + .property("name", new StringProperty()) + .property("address", new ObjectProperty() + .title("title") + ._default("default") + .access("access") + .readOnly(false) + .required(true) + .description("description") + .name("name") + .property("street", new StringProperty()) + .property("city", new StringProperty()))); + + new InlineModelResolver().flatten(swagger); + + Json.prettyPrint(swagger); + } + + @Test + public void testInlineResponseModel() throws Exception { + Swagger swagger = new Swagger(); + + swagger.path("/foo/bar", new Path() + .get(new Operation() + .response(200, new Response() + .description("it works!") + .schema(new ObjectProperty() + .property("name", new StringProperty()))))) + .path("/foo/baz", new Path() + .get(new Operation() + .response(200, new Response() + .vendorExtension("x-foo", "bar") + .description("it works!") + .schema(new ObjectProperty() + .vendorExtension("x-baz", "boo") + .property("name", new StringProperty() + .vendorExtension("x-bars", "bleh")))))); + new InlineModelResolver().flatten(swagger); + + Json.prettyPrint(swagger); + } + + @Test + public void resolveInlineArrayModel() throws Exception { + Swagger swagger = new Swagger(); + + swagger.addDefinition("User", new ArrayModel() + .items(new ObjectProperty() + .title("title") + ._default("default") + .access("access") + .readOnly(false) + .required(true) + .description("description") + .name("name") + .property("street", new StringProperty()) + .property("city", new StringProperty()))); + + new InlineModelResolver().flatten(swagger); + + Json.prettyPrint(swagger); + } + + @Test + public void resolveInlineBodyParameter() throws Exception { + Swagger swagger = new Swagger(); + + swagger.path("/hello", new Path() + .get(new Operation() + .parameter(new BodyParameter() + .name("body") + .schema(new ModelImpl() + .property("name", new StringProperty()))))); + + new InlineModelResolver().flatten(swagger); + + Json.prettyPrint(swagger); + } +} From bfa4303e6e9a88bf99e2754fc7974ea5d405451a Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 16 Oct 2015 18:21:34 -0700 Subject: [PATCH 09/78] added inline model resolver --- .../src/main/java/io/swagger/codegen/DefaultGenerator.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index a785f45bdf21..bc8a60afbd68 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -126,6 +126,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { String basePath = hostBuilder.toString(); + // resolve inline models + InlineModelResolver inlineModelResolver = new InlineModelResolver(); + inlineModelResolver.flatten(swagger); + List allOperations = new ArrayList(); List allModels = new ArrayList(); From ad1626ad2d108eaf0f2f81abe55949e4c7b577f8 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 16 Oct 2015 18:22:13 -0700 Subject: [PATCH 10/78] added yaml sample --- .../src/test/resources/2_0/wordnik.yaml | 1643 +++++++++++++++++ 1 file changed, 1643 insertions(+) create mode 100644 modules/swagger-codegen/src/test/resources/2_0/wordnik.yaml diff --git a/modules/swagger-codegen/src/test/resources/2_0/wordnik.yaml b/modules/swagger-codegen/src/test/resources/2_0/wordnik.yaml new file mode 100644 index 000000000000..5d46e5a8b7e0 --- /dev/null +++ b/modules/swagger-codegen/src/test/resources/2_0/wordnik.yaml @@ -0,0 +1,1643 @@ +swagger: '2.0' + +info: + version: 4.0.1 + title: The Wordnik Public API + description: "**Wordnik has an API, and you're invited.**\nThe Wordnik API lets you request definitions, example sentences, spelling suggestions, \nrelated words like synonyms and antonyms, phrases containing a given word, word \nautocompletion, random words, words of the day, and much more\n" + contact: + url: 'http://developer.wordnik.com/' + email: apiteam@wordnik.com + name: Wordnik API Team + +schemes: + - https +host: api.wordnik.com +basePath: /v4 + +securityDefinitions: + apiKey: + type: apiKey + in: header + name: api_key +security: + - apiKey: [] +paths: + /words.json/randomWord: + get: + tags: + - words + summary: Returns a single random WordObject + operationId: getRandomWord + parameters: + - name: hasDictionaryDef + in: query + description: Only return words with dictionary definitions + required: false + type: string + - name: includePartOfSpeech + in: query + description: CSV part-of-speech values to include + required: false + type: string + - name: excludePartOfSpeech + in: query + description: CSV part-of-speech values to exclude + required: false + type: string + - name: minCorpusCount + in: query + description: Minimum corpus frequency for terms + required: false + type: integer + format: int32 + - name: maxCorpusCount + in: query + description: Maximum corpus frequency for terms + required: false + type: integer + format: int32 + - name: minDictionaryCount + in: query + description: Minimum dictionary count + required: false + type: integer + format: int32 + - name: maxDictionaryCount + in: query + description: Maximum dictionary count + required: false + type: integer + format: int32 + - name: minLength + in: query + description: Minimum word length + required: false + type: integer + format: int32 + - name: maxLength + in: query + description: Maximum word length + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + $ref: '#/definitions/WordObject' + '404': + description: No word found. + /account.json/user: + get: + tags: + - account + summary: Returns the logged-in User + description: Requires a valid auth_token to be set. + operationId: getLoggedInUser + parameters: + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: The logged-in user + schema: + $ref: '#/definitions/User' + '403': + description: Not logged in. + '404': + description: User not found. + '/word.json/{word}/pronunciations': + get: + tags: + - word + summary: Returns text pronunciations for a given word + operationId: getTextPronunciations + parameters: + - name: word + in: path + description: Word to get pronunciations for + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return a correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: sourceDictionary + in: query + description: Get from a single dictionary + required: false + type: string + - name: typeFormat + in: query + description: Text pronunciation type + required: false + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/TextPron' + '400': + description: Invalid word supplied. + '/word.json/{word}/relatedWords': + get: + tags: + - word + summary: 'Given a word as a string, returns relationships from the Word Graph' + operationId: getRelatedWords + parameters: + - name: word + in: path + description: Word to fetch relationships for + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: relationshipTypes + in: query + description: Limits the total results per type of relationship type + required: false + type: string + - name: limitPerRelationshipType + in: query + description: Restrict to the supplied relationship types + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/Related' + '400': + description: Invalid word supplied. + /words.json/reverseDictionary: + get: + tags: + - words + summary: Reverse dictionary search + operationId: reverseDictionary + parameters: + - name: query + in: query + description: Search term + required: true + type: string + - name: findSenseForWord + in: query + description: Restricts words and finds closest sense + required: false + type: string + - name: includeSourceDictionaries + in: query + description: Only include these comma-delimited source dictionaries + required: false + type: string + - name: excludeSourceDictionaries + in: query + description: Exclude these comma-delimited source dictionaries + required: false + type: string + - name: includePartOfSpeech + in: query + description: Only include these comma-delimited parts of speech + required: false + type: string + - name: excludePartOfSpeech + in: query + description: Exclude these comma-delimited parts of speech + required: false + type: string + - name: minCorpusCount + in: query + description: Minimum corpus frequency for terms + required: false + type: integer + format: int32 + - name: maxCorpusCount + in: query + description: Maximum corpus frequency for terms + required: false + type: integer + format: int32 + - name: minLength + in: query + description: Minimum word length + required: false + type: integer + format: int32 + - name: maxLength + in: query + description: Maximum word length + required: false + type: integer + format: int32 + - name: expandTerms + in: query + description: Expand terms + required: false + type: string + - name: includeTags + in: query + description: Return a closed set of XML tags in response + required: false + type: string + - name: sortBy + in: query + description: Attribute to sort by + required: false + type: string + - name: sortOrder + in: query + description: Sort direction + required: false + type: string + - name: skip + in: query + description: Results to skip + required: false + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + $ref: '#/definitions/DefinitionSearchResults' + '400': + description: Invalid term supplied. + /account.json/apiTokenStatus: + get: + tags: + - account + summary: Returns usage statistics for the API account. + operationId: getApiTokenStatus + parameters: + - name: api_key + in: header + description: Wordnik authentication token + required: false + type: string + responses: + '200': + description: Usage statistics for the supplied API key + schema: + $ref: '#/definitions/ApiTokenStatus' + '400': + description: No token supplied. + '404': + description: No API account with supplied token. + '/word.json/{word}': + get: + tags: + - word + summary: 'Given a word as a string, returns the WordObject that represents it' + operationId: getWord + parameters: + - name: word + in: path + description: String value of WordObject to return + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: includeSuggestions + in: query + description: 'Return suggestions (for correct spelling, case variants, etc.)' + required: false + type: string + responses: + '200': + description: success + schema: + $ref: '#/definitions/WordObject' + '400': + description: Invalid word supplied. + '/wordList.json/{permalink}/deleteWords': + post: + tags: + - wordList + summary: Removes words from a WordList + operationId: deleteWordsFromWordList + parameters: + - name: permalink + in: path + description: permalink of WordList to use + required: true + type: string + - in: body + name: body + description: Words to remove from WordList + required: false + schema: + type: array + items: + $ref: '#/definitions/StringValue' + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + '400': + description: Invalid permalink supplied + '403': + description: Not Authorized to modify WordList + '404': + description: WordList not found + '/word.json/{word}/examples': + get: + tags: + - word + summary: Returns examples for a word + operationId: getExamples + parameters: + - name: word + in: path + description: Word to return examples for + required: true + type: string + - name: includeDuplicates + in: query + description: Show duplicate examples from different sources + required: false + type: string + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: skip + in: query + description: Results to skip + required: false + type: integer + format: int32 + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + $ref: '#/definitions/ExampleSearchResults' + '400': + description: Invalid word supplied. + '400': + description: Invalid word supplied. + '/account.json/authenticate/{username}': + get: + tags: + - account + summary: Authenticates a User + operationId: authenticate + parameters: + - name: username + in: path + description: A confirmed Wordnik username + required: true + type: string + - name: password + in: query + description: "The user's password" + required: true + type: string + responses: + '200': + description: A valid authentication token + schema: + $ref: '#/definitions/AuthenticationToken' + '403': + description: Account not available. + '404': + description: User not found. + post: + tags: + - account + summary: Authenticates a user + operationId: authenticatePost + parameters: + - name: username + in: path + description: A confirmed Wordnik username + required: true + type: string + - in: body + name: body + schema: + type: string + description: "The user's password" + required: true + responses: + '200': + description: A valid authentication token + schema: + $ref: '#/definitions/AuthenticationToken' + '403': + description: Account not available. + '404': + description: User not found. + '/word.json/{word}/audio': + get: + tags: + - word + summary: Fetches audio metadata for a word. + description: The metadata includes a time-expiring fileUrl which allows reading the audio file directly from the API. Currently only audio pronunciations from the American Heritage Dictionary in mp3 format are supported. + operationId: getAudio + parameters: + - name: word + in: path + description: Word to get audio for. + required: true + type: string + - name: useCanonical + in: query + description: Use the canonical form of the word + required: false + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/AudioFile' + '400': + description: Invalid word supplied. + /words.json/randomWords: + get: + tags: + - words + summary: Returns an array of random WordObjects + operationId: getRandomWords + parameters: + - name: hasDictionaryDef + in: query + description: Only return words with dictionary definitions + required: false + type: string + - name: includePartOfSpeech + in: query + description: CSV part-of-speech values to include + required: false + type: string + - name: excludePartOfSpeech + in: query + description: CSV part-of-speech values to exclude + required: false + type: string + - name: minCorpusCount + in: query + description: Minimum corpus frequency for terms + required: false + type: integer + format: int32 + - name: maxCorpusCount + in: query + description: Maximum corpus frequency for terms + required: false + type: integer + format: int32 + - name: minDictionaryCount + in: query + description: Minimum dictionary count + required: false + type: integer + format: int32 + - name: maxDictionaryCount + in: query + description: Maximum dictionary count + required: false + type: integer + format: int32 + - name: minLength + in: query + description: Minimum word length + required: false + type: integer + format: int32 + - name: maxLength + in: query + description: Maximum word length + required: false + type: integer + format: int32 + - name: sortBy + in: query + description: Attribute to sort by + required: false + type: string + - name: sortOrder + in: query + description: Sort direction + required: false + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/WordObject' + '400': + description: Invalid term supplied. + '404': + description: No results. + /account.json/wordLists: + get: + tags: + - account + summary: Fetches WordList objects for the logged-in user. + operationId: getWordListsForLoggedInUser + parameters: + - name: auth_token + in: header + description: auth_token of logged-in user + required: true + type: string + - name: skip + in: query + description: Results to skip + required: false + type: integer + format: int32 + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/WordList' + '403': + description: Not authenticated. + '404': + description: User account not found. + '/word.json/{word}/phrases': + get: + tags: + - word + summary: Fetches bi-gram phrases for a word + operationId: getPhrases + parameters: + - name: word + in: path + description: Word to fetch phrases for + required: true + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + - name: wlmi + in: query + description: Minimum WLMI for the phrase + required: false + type: integer + format: int32 + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/Bigram' + '400': + description: Invalid word supplied. + '/word.json/{word}/frequency': + get: + tags: + - word + summary: Returns word usage over time + operationId: getWordFrequency + parameters: + - name: word + in: path + description: Word to return + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: startYear + in: query + description: Starting Year + required: false + type: integer + format: int32 + - name: endYear + in: query + description: Ending Year + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + $ref: '#/definitions/FrequencySummary' + '400': + description: Invalid word supplied. + '404': + description: No results. + '/wordList.json/{permalink}/words': + get: + tags: + - wordList + summary: Fetches words in a WordList + operationId: getWordListWords + parameters: + - name: permalink + in: path + description: ID of WordList to use + required: true + type: string + - name: sortBy + in: query + description: Field to sort by + required: false + type: string + - name: sortOrder + in: query + description: Direction to sort + required: false + type: string + - name: skip + in: query + description: Results to skip + required: false + type: integer + format: int32 + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/WordListWord' + $ref: '#/definitions/WordListWord' + '400': + description: Invalid ID supplied + '403': + description: Not Authorized to access WordList + '404': + description: WordList not found + post: + tags: + - wordList + summary: Adds words to a WordList + operationId: addWordsToWordList + parameters: + - name: permalink + in: path + description: permalink of WordList to user + required: true + type: string + - in: body + name: body + description: Array of words to add to WordList + required: false + schema: + type: array + items: + $ref: '#/definitions/StringValue' + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + '400': + description: Invalid permalink supplied + '403': + description: Not Authorized to access WordList + '404': + description: WordList not found + /wordLists.json: + post: + tags: + - wordLists + summary: Creates a WordList. + operationId: createWordList + parameters: + - in: body + name: body + description: WordList to create + required: false + schema: + $ref: '#/definitions/WordList' + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + schema: + $ref: '#/definitions/WordList' + '400': + description: Invalid WordList supplied or mandatory fields are missing + '403': + description: Not authenticated + '404': + description: WordList owner not found + '/word.json/{word}/etymologies': + get: + tags: + - word + summary: Fetches etymology data + operationId: getEtymologies + parameters: + - name: word + in: path + description: Word to return + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + responses: + '200': + description: success + schema: + type: array + items: + type: string + '400': + description: Invalid word supplied. + '404': + description: No definitions found. + '/word.json/{word}/topExample': + get: + tags: + - word + summary: Returns a top example for a word + operationId: getTopExample + parameters: + - name: word + in: path + description: Word to fetch examples for + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + responses: + '200': + description: success + schema: + $ref: '#/definitions/Example' + '400': + description: Invalid word supplied. + '/word.json/{word}/definitions': + get: + tags: + - word + summary: Return definitions for a word + operationId: getDefinitions + parameters: + - name: word + in: path + description: Word to return definitions for + required: true + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + - name: partOfSpeech + in: query + description: CSV list of part-of-speech types + required: false + type: string + - name: includeRelated + in: query + description: Return related words with definitions + required: false + type: string + - name: sourceDictionaries + in: query + description: "Source dictionary to return definitions from. If 'all' is received, results are returned from all sources. If multiple values are received (e.g. 'century,wiktionary'), results are returned from the first specified dictionary that has definitions. If left blank, results are returned from the first dictionary that has definitions. By default, dictionaries are searched in this order: ahd, wiktionary, webster, century, wordnet" + required: false + type: array + items: + type: string + collectionFormat: csv + - name: useCanonical + in: query + description: "If true will try to return the correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: includeTags + in: query + description: Return a closed set of XML tags in response + required: false + type: string + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/Definition' + '400': + description: Invalid word supplied. + '404': + description: No definitions found. + '/words.json/search/{query}': + get: + tags: + - words + summary: Searches words + operationId: searchWords + parameters: + - name: query + in: path + description: Search query + required: true + type: string + - name: caseSensitive + in: query + description: Search case sensitive + required: false + type: string + - name: includePartOfSpeech + in: query + description: Only include these comma-delimited parts of speech + required: false + type: string + - name: excludePartOfSpeech + in: query + description: Exclude these comma-delimited parts of speech + required: false + type: string + - name: minCorpusCount + in: query + description: Minimum corpus frequency for terms + required: false + type: integer + format: int32 + - name: maxCorpusCount + in: query + description: Maximum corpus frequency for terms + required: false + type: integer + format: int32 + - name: minDictionaryCount + in: query + description: Minimum number of dictionary entries for words returned + required: false + type: integer + format: int32 + - name: maxDictionaryCount + in: query + description: Maximum dictionary definition count + required: false + type: integer + format: int32 + - name: minLength + in: query + description: Minimum word length + required: false + type: integer + format: int32 + - name: maxLength + in: query + description: Maximum word length + required: false + type: integer + format: int32 + - name: skip + in: query + description: Results to skip + required: false + type: integer + format: int32 + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + $ref: '#/definitions/WordSearchResults' + '400': + description: Invalid query supplied. + '/wordList.json/{permalink}': + get: + tags: + - wordList + summary: Fetches a WordList by ID + operationId: getWordListByPermalink + parameters: + - name: permalink + in: path + description: permalink of WordList to fetch + required: true + type: string + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + schema: + $ref: '#/definitions/WordList' + '400': + description: Invalid ID supplied + '403': + description: Not Authorized to access WordList + '404': + description: WordList not found + put: + tags: + - wordList + summary: Updates an existing WordList + operationId: updateWordList + parameters: + - name: permalink + in: path + description: permalink of WordList to update + required: true + type: string + - in: body + name: body + description: Updated WordList + required: false + schema: + $ref: '#/definitions/WordList' + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + '400': + description: Invalid ID supplied + '403': + description: Not Authorized to update WordList + '404': + description: WordList not found + delete: + tags: + - wordList + summary: Deletes an existing WordList + operationId: deleteWordList + parameters: + - name: permalink + in: path + description: ID of WordList to delete + required: true + type: string + - name: auth_token + in: header + description: 'The auth token of the logged-in user, obtained by calling /account.json/authenticate/{username} (described above)' + required: true + type: string + responses: + '200': + description: success + '400': + description: Invalid ID supplied + '403': + description: Not Authorized to delete WordList + '404': + description: WordList not found + '/word.json/{word}/hyphenation': + get: + tags: + - word + summary: Returns syllable information for a word + operationId: getHyphenation + parameters: + - name: word + in: path + description: Word to get syllables for + required: true + type: string + - name: useCanonical + in: query + description: "If true will try to return a correct word root ('cats' -> 'cat'). If false returns exactly what was requested." + required: false + type: string + - name: sourceDictionary + in: query + description: 'Get from a single dictionary. Valid options: ahd, century, wiktionary, webster, and wordnet.' + required: false + type: string + - name: limit + in: query + description: Maximum number of results to return + required: false + type: integer + format: int32 + responses: + '200': + description: success + schema: + type: array + items: + $ref: '#/definitions/Syllable' + '400': + description: Invalid word supplied. + /words.json/wordOfTheDay: + get: + tags: + - words + summary: Returns a specific WordOfTheDay + operationId: getWordOfTheDay + parameters: + - name: date + in: query + description: Fetches by date in yyyy-MM-dd + required: false + type: string + responses: + default: + description: success + schema: + $ref: '#/definitions/WordOfTheDay' +definitions: + Syllable: + properties: + text: + type: string + seq: + type: integer + format: int32 + type: + type: string + StringValue: + properties: + word: + type: string + AuthenticationToken: + properties: + token: + type: string + userId: + type: integer + format: int64 + userSignature: + type: string + Sentence: + properties: + hasScoredWords: + type: boolean + id: + type: integer + format: int64 + scoredWords: + type: array + items: + $ref: '#/definitions/ScoredWord' + display: + type: string + rating: + type: integer + format: int32 + documentMetadataId: + type: integer + format: int64 + ExampleSearchResults: + properties: + facets: + type: array + items: + $ref: '#/definitions/Facet' + examples: + type: array + items: + $ref: '#/definitions/Example' + WordSearchResults: + properties: + searchResults: + type: array + items: + $ref: '#/definitions/WordSearchResult' + totalResults: + type: integer + format: int32 + SimpleDefinition: + properties: + text: + type: string + source: + type: string + note: + type: string + partOfSpeech: + type: string + Citation: + properties: + cite: + type: string + source: + type: string + WordList: + properties: + numberWordsInList: + type: integer + format: int64 + userId: + type: integer + format: int64 + name: + type: string + permalink: + type: string + updatedAt: + type: string + format: date-time + username: + type: string + lastActivityAt: + type: string + format: date-time + type: + type: string + id: + type: integer + format: int64 + createdAt: + type: string + format: date-time + description: + type: string + WordObject: + properties: + id: + type: integer + format: int64 + word: + type: string + originalWord: + type: string + suggestions: + type: array + items: + type: string + canonicalForm: + type: string + vulgar: + type: string + Example: + properties: + sentence: + $ref: '#/definitions/Sentence' + exampleId: + type: integer + format: int64 + word: + type: string + text: + type: string + url: + type: string + provider: + $ref: '#/definitions/ContentProvider' + score: + $ref: '#/definitions/ScoredWord' + documentId: + type: integer + format: int64 + title: + type: string + id: + type: integer + format: int64 + year: + type: integer + format: int32 + rating: + type: number + format: float + ContentProvider: + properties: + id: + type: integer + format: int32 + name: + type: string + FrequencySummary: + properties: + unknownYearCount: + type: integer + format: int32 + totalCount: + type: integer + format: int64 + frequencyString: + type: string + word: + type: string + frequency: + type: array + items: + $ref: '#/definitions/Frequency' + Related: + properties: + label1: + type: string + relationshipType: + type: string + label2: + type: string + label3: + type: string + words: + type: array + items: + type: string + gram: + type: string + label4: + type: string + User: + properties: + id: + type: integer + format: int64 + username: + type: string + email: + type: string + status: + type: integer + format: int32 + faceBookId: + type: string + userName: + type: string + displayName: + type: string + password: + type: string + WordOfTheDay: + properties: + definitions: + type: array + items: + $ref: '#/definitions/SimpleDefinition' + htmlExtra: + type: string + parentId: + type: string + examples: + type: array + items: + $ref: '#/definitions/SimpleExample' + contentProvider: + $ref: '#/definitions/ContentProvider' + word: + type: string + note: + type: string + id: + type: integer + format: int64 + createdAt: + type: string + format: date-time + publishDate: + type: string + format: date-time + category: + type: string + createdBy: + type: string + TextPron: + properties: + raw: + type: string + seq: + type: integer + format: int32 + rawType: + type: string + WordSearchResult: + properties: + count: + type: integer + format: int64 + lexicality: + type: number + format: double + word: + type: string + ApiTokenStatus: + properties: + valid: + type: boolean + token: + type: string + resetsInMillis: + type: integer + format: int64 + remainingCalls: + type: integer + format: int64 + expiresInMillis: + type: integer + format: int64 + totalRequests: + type: integer + format: int64 + Note: + properties: + noteType: + type: string + appliesTo: + type: array + items: + type: string + value: + type: string + pos: + type: integer + format: int32 + WordListWord: + properties: + id: + type: integer + format: int64 + word: + type: string + username: + type: string + userId: + type: integer + format: int64 + createdAt: + type: string + format: date-time + numberCommentsOnWord: + type: integer + format: int64 + numberLists: + type: integer + format: int64 + AudioFile: + properties: + voteCount: + type: integer + format: int32 + word: + type: string + attributionText: + type: string + audioType: + type: string + attributionUrl: + type: string + commentCount: + type: integer + format: int32 + fileUrl: + type: string + voteAverage: + type: number + format: float + duration: + type: number + format: double + id: + type: integer + format: int64 + createdAt: + type: string + format: date-time + voteWeightedAverage: + type: number + format: float + description: + type: string + createdBy: + type: string + Definition: + properties: + notes: + type: array + items: + $ref: '#/definitions/Note' + sequence: + type: string + textProns: + type: array + items: + $ref: '#/definitions/TextPron' + extendedText: + type: string + word: + type: string + attributionText: + type: string + citations: + type: array + items: + $ref: '#/definitions/Citation' + partOfSpeech: + type: string + text: + type: string + attributionUrl: + type: string + seqString: + type: string + sourceDictionary: + type: string + score: + type: number + format: float + exampleUses: + type: array + items: + $ref: '#/definitions/ExampleUsage' + relatedWords: + type: array + items: + $ref: '#/definitions/Related' + labels: + type: array + items: + $ref: '#/definitions/Label' + Label: + properties: + text: + type: string + type: + type: string + Facet: + properties: + facetValues: + type: array + items: + $ref: '#/definitions/FacetValue' + name: + type: string + ExampleUsage: + properties: + text: + type: string + SimpleExample: + properties: + id: + type: integer + format: int64 + title: + type: string + text: + type: string + url: + type: string + FacetValue: + properties: + count: + type: integer + format: int64 + value: + type: string + DefinitionSearchResults: + properties: + results: + type: array + items: + $ref: '#/definitions/Definition' + totalResults: + type: integer + format: int32 + Frequency: + properties: + count: + type: integer + format: int64 + year: + type: integer + format: int32 + ScoredWord: + properties: + wordType: + type: string + lemma: + type: string + position: + type: integer + format: int32 + word: + type: string + docTermCount: + type: integer + format: int32 + stopword: + type: boolean + partOfSpeech: + type: string + score: + type: number + format: float + baseWordScore: + type: number + format: double + id: + type: integer + format: int64 + sentenceId: + type: integer + format: int64 + Bigram: + properties: + count: + type: integer + format: int64 + gram2: + type: string + gram1: + type: string + wlmi: + type: number + format: double + mi: + type: number + format: double \ No newline at end of file From 6477a27579fac9b8eb32a5ac62c7adf0abbffc52 Mon Sep 17 00:00:00 2001 From: Nick Bruno Date: Fri, 16 Oct 2015 21:24:17 -0400 Subject: [PATCH 11/78] Update SpringMVC template to include Authorization annotations --- .../src/main/resources/JavaSpringMVC/api.mustache | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/api.mustache b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/api.mustache index 695d1c5525b6..6eb6358a7026 100644 --- a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/api.mustache @@ -10,6 +10,8 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +import io.swagger.annotations.AuthorizationScope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -35,7 +37,13 @@ import static org.springframework.http.MediaType.*; public class {{classname}} { {{#operation}} - @ApiOperation(value = "{{{summary}}}", notes = "{{{notes}}}", response = {{{returnType}}}.class{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}) + @ApiOperation(value = "{{{summary}}}", notes = "{{{notes}}}", response = {{{returnType}}}.class{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}{{#hasAuthMethods}}, authorizations = { + {{#authMethods}}@Authorization(value = "{{name}}"{{#isOAuth}}, scopes = { + {{#scopes}}@AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{#hasMore}}, + {{/hasMore}}{{/scopes}} + }{{/isOAuth}}){{#hasMore}}, + {{/hasMore}}{{/authMethods}} + }{{/hasAuthMethods}}) @ApiResponses(value = { {{#responses}} @ApiResponse(code = {{{code}}}, message = "{{{message}}}"){{#hasMore}},{{/hasMore}}{{/responses}} }) @RequestMapping(value = "{{path}}", From 7bbb883a001cdf1ffe8a271a4c78b34c5d3380c9 Mon Sep 17 00:00:00 2001 From: Nick Bruno Date: Fri, 16 Oct 2015 21:25:54 -0400 Subject: [PATCH 12/78] Generate JAXRS and SpringMVC samples to demo Authorization annotations --- samples/server/petstore/jaxrs/README.md | 8 +- .../gen/java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/gen/java/io/swagger/api/PetApi.java | 85 ++++++++++++++----- .../java/io/swagger/api/PetApiService.java | 2 +- .../src/gen/java/io/swagger/api/StoreApi.java | 24 +++--- .../java/io/swagger/api/StoreApiService.java | 2 +- .../src/gen/java/io/swagger/api/UserApi.java | 34 ++++---- .../java/io/swagger/api/UserApiService.java | 2 +- .../gen/java/io/swagger/model/Category.java | 2 +- .../src/gen/java/io/swagger/model/Order.java | 2 +- .../src/gen/java/io/swagger/model/Pet.java | 2 +- .../src/gen/java/io/swagger/model/Tag.java | 2 +- .../src/gen/java/io/swagger/model/User.java | 2 +- .../java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/main/java/io/swagger/api/PetApi.java | 69 ++++++++++++--- .../main/java/io/swagger/api/StoreApi.java | 16 ++-- .../src/main/java/io/swagger/api/UserApi.java | 16 ++-- .../swagger/configuration/SwaggerConfig.java | 2 +- .../configuration/SwaggerUiConfiguration.java | 2 +- .../swagger/configuration/WebApplication.java | 2 +- .../configuration/WebMvcConfiguration.java | 2 +- .../main/java/io/swagger/model/Category.java | 2 +- .../src/main/java/io/swagger/model/Order.java | 2 +- .../src/main/java/io/swagger/model/Pet.java | 2 +- .../src/main/java/io/swagger/model/Tag.java | 2 +- .../src/main/java/io/swagger/model/User.java | 2 +- 32 files changed, 196 insertions(+), 106 deletions(-) diff --git a/samples/server/petstore/jaxrs/README.md b/samples/server/petstore/jaxrs/README.md index 3ffa01fb2571..3f0809d4734d 100644 --- a/samples/server/petstore/jaxrs/README.md +++ b/samples/server/petstore/jaxrs/README.md @@ -1,10 +1,8 @@ # Swagger generated server ## Overview -This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the +This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub. This -is an example of building a swagger-enabled scalatra server. +is an example of building a swagger-enabled JAX-RS server. -This example uses the [scalatra](http://scalatra.org/) framework. To see how to make this your own, look here: - -[README](https://github.com/swagger-api/swagger-codegen/tree/master/samples/server-generator/scalatra) \ No newline at end of file +This example uses the [JAX-RS](https://jax-rs-spec.java.net/) framework. diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java index 300636842ba1..12cb749d46ee 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java index e7ad9b521ac4..e82f34c2b620 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java index 6d6958c1c907..8a36255be29b 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java index c3eab326e644..bb483dfc8780 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java index f583f1e64cfc..4f440e006710 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class PetApi { private final PetApiService delegate = PetApiServiceFactory.getPetApi(); @@ -35,35 +35,50 @@ public class PetApi { @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = Void.class) }) public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) throws NotFoundException { - return delegate.updatePet(body); + return delegate.updatePet(body); } @POST @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) throws NotFoundException { - return delegate.addPet(body); + return delegate.addPet(body); } @GET @Path("/findByStatus") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List") + @io.swagger.annotations.ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List", authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"), @@ -71,13 +86,18 @@ public class PetApi { public Response findPetsByStatus(@ApiParam(value = "Status values that need to be considered for filter", defaultValue="available") @QueryParam("status") List status) throws NotFoundException { - return delegate.findPetsByStatus(status); + return delegate.findPetsByStatus(status); } @GET @Path("/findByTags") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List") + @io.swagger.annotations.ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List", authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"), @@ -85,29 +105,40 @@ public class PetApi { public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List tags) throws NotFoundException { - return delegate.findPetsByTags(tags); + return delegate.findPetsByTags(tags); } @GET @Path("/{petId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) + @io.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class, authorizations = { + @io.swagger.annotations.Authorization(value = "api_key"), + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Pet.class), - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Pet.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Pet.class), + + @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Pet.class) }) public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("petId") Long petId) throws NotFoundException { - return delegate.getPetById(petId); + return delegate.getPetById(petId); } @POST @Path("/{petId}") @Consumes({ "application/x-www-form-urlencoded" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) @@ -115,26 +146,36 @@ public class PetApi { @ApiParam(value = "Updated name of the pet" )@FormParam("name") String name, @ApiParam(value = "Updated status of the pet" )@FormParam("status") String status) throws NotFoundException { - return delegate.updatePetWithForm(petId,name,status); + return delegate.updatePetWithForm(petId,name,status); } @DELETE @Path("/{petId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value", response = Void.class) }) public Response deletePet(@ApiParam(value = "Pet id to delete",required=true ) @PathParam("petId") Long petId, @ApiParam(value = "" )@HeaderParam("api_key") String apiKey) throws NotFoundException { - return delegate.deletePet(petId,apiKey); + return delegate.deletePet(petId,apiKey); } @POST @Path("/{petId}/uploadImage") @Consumes({ "multipart/form-data" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) @@ -143,7 +184,7 @@ public class PetApi { @FormDataParam("file") InputStream inputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws NotFoundException { - return delegate.uploadFile(petId,additionalMetadata,fileDetail); + return delegate.uploadFile(petId,additionalMetadata,fileDetail); } } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java index 708dc647f911..501f5aeca33e 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public abstract class PetApiService { public abstract Response updatePet(Pet body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java index a487439cb3f9..3ff3886e0cbe 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class StoreApi { private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); @@ -35,13 +35,15 @@ public class StoreApi { @Path("/inventory") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map") + @io.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = { + @io.swagger.annotations.Authorization(value = "api_key") + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Integer.class, responseContainer = "Map") }) public Response getInventory() throws NotFoundException { - return delegate.getInventory(); + return delegate.getInventory(); } @POST @Path("/order") @@ -55,7 +57,7 @@ public class StoreApi { public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body) throws NotFoundException { - return delegate.placeOrder(body); + return delegate.placeOrder(body); } @GET @Path("/order/{orderId}") @@ -63,15 +65,15 @@ public class StoreApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Order.class), - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Order.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Order.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Order.class), + + @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Order.class) }) public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("orderId") String orderId) throws NotFoundException { - return delegate.getOrderById(orderId); + return delegate.getOrderById(orderId); } @DELETE @Path("/order/{orderId}") @@ -79,13 +81,13 @@ public class StoreApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Void.class) }) public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true ) @PathParam("orderId") String orderId) throws NotFoundException { - return delegate.deleteOrder(orderId); + return delegate.deleteOrder(orderId); } } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java index 955d640d1b5f..4f39bff11419 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public abstract class StoreApiService { public abstract Response getInventory() diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java index d7bde1b17534..94b8e247e09e 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class UserApi { private final UserApiService delegate = UserApiServiceFactory.getUserApi(); @@ -41,7 +41,7 @@ public class UserApi { public Response createUser(@ApiParam(value = "Created user object" ) User body) throws NotFoundException { - return delegate.createUser(body); + return delegate.createUser(body); } @POST @Path("/createWithArray") @@ -53,7 +53,7 @@ public class UserApi { public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body) throws NotFoundException { - return delegate.createUsersWithArrayInput(body); + return delegate.createUsersWithArrayInput(body); } @POST @Path("/createWithList") @@ -65,7 +65,7 @@ public class UserApi { public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body) throws NotFoundException { - return delegate.createUsersWithListInput(body); + return delegate.createUsersWithListInput(body); } @GET @Path("/login") @@ -80,7 +80,7 @@ public class UserApi { public Response loginUser(@ApiParam(value = "The user name for login") @QueryParam("username") String username, @ApiParam(value = "The password for login in clear text") @QueryParam("password") String password) throws NotFoundException { - return delegate.loginUser(username,password); + return delegate.loginUser(username,password); } @GET @Path("/logout") @@ -92,7 +92,7 @@ public class UserApi { public Response logoutUser() throws NotFoundException { - return delegate.logoutUser(); + return delegate.logoutUser(); } @GET @Path("/{username}") @@ -100,15 +100,15 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Get user by user name", notes = "", response = User.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = User.class), - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = User.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = User.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = User.class), + + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = User.class) }) - public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing. ",required=true ) @PathParam("username") String username) + public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.",required=true ) @PathParam("username") String username) throws NotFoundException { - return delegate.getUserByName(username); + return delegate.getUserByName(username); } @PUT @Path("/{username}") @@ -116,14 +116,14 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true ) @PathParam("username") String username, @ApiParam(value = "Updated user object" ) User body) throws NotFoundException { - return delegate.updateUser(username,body); + return delegate.updateUser(username,body); } @DELETE @Path("/{username}") @@ -131,13 +131,13 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true ) @PathParam("username") String username) throws NotFoundException { - return delegate.deleteUser(username); + return delegate.deleteUser(username); } } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java index e838a00e2829..16b0e676ec51 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public abstract class UserApiService { public abstract Response createUser(User body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java index 57666c8444b8..312ece05b725 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java index 99b3c758473e..ae633dc2e859 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java index 0b01a065022e..d4a653c1bc67 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java index 935e04025c87..ff748500a0b4 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java index 6d6fb0c1d94e..679c39e879e6 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-16T21:16:23.957-04:00") public class User { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java index f761d3871daf..b9eb20d65e53 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java index 432c49d5d5cd..9e2354cf2c56 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class ApiOriginFilter implements javax.servlet.Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java index c606c9398f49..fc4136a37a21 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java index 9c93b025ef93..04e28c547541 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java index ae731880a173..73849a0944ea 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java @@ -10,6 +10,8 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +import io.swagger.annotations.AuthorizationScope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -30,15 +32,20 @@ import static org.springframework.http.MediaType.*; @Controller @RequestMapping(value = "/pet", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class PetApi { - @ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) + @ApiOperation(value = "Update an existing pet", notes = "", response = Void.class, authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { - @ApiResponse(code = 405, message = "Validation exception"), + @ApiResponse(code = 400, message = "Invalid ID supplied"), @ApiResponse(code = 404, message = "Pet not found"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 405, message = "Validation exception") }) @RequestMapping(value = "", produces = { "application/json", "application/xml" }, consumes = { "application/json", "application/xml" }, @@ -54,7 +61,12 @@ public class PetApi { - @ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class) + @ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class, authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { @ApiResponse(code = 405, message = "Invalid input") }) @RequestMapping(value = "", @@ -72,7 +84,12 @@ public class PetApi { - @ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List") + @ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List", authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { @ApiResponse(code = 200, message = "successful operation"), @ApiResponse(code = 400, message = "Invalid status value") }) @@ -91,7 +108,12 @@ public class PetApi { - @ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List") + @ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List", authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { @ApiResponse(code = 200, message = "successful operation"), @ApiResponse(code = 400, message = "Invalid tag value") }) @@ -110,11 +132,17 @@ public class PetApi { - @ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) + @ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class, authorizations = { + @Authorization(value = "api_key"), + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { - @ApiResponse(code = 404, message = "Pet not found"), @ApiResponse(code = 200, message = "successful operation"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 400, message = "Invalid ID supplied"), + @ApiResponse(code = 404, message = "Pet not found") }) @RequestMapping(value = "/{petId}", produces = { "application/json", "application/xml" }, @@ -130,7 +158,12 @@ public class PetApi { - @ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class) + @ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class, authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { @ApiResponse(code = 405, message = "Invalid input") }) @RequestMapping(value = "/{petId}", @@ -158,7 +191,12 @@ public class PetApi { - @ApiOperation(value = "Deletes a pet", notes = "", response = Void.class) + @ApiOperation(value = "Deletes a pet", notes = "", response = Void.class, authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { @ApiResponse(code = 400, message = "Invalid pet value") }) @RequestMapping(value = "/{petId}", @@ -180,7 +218,12 @@ public class PetApi { - @ApiOperation(value = "uploads an image", notes = "", response = Void.class) + @ApiOperation(value = "uploads an image", notes = "", response = Void.class, authorizations = { + @Authorization(value = "petstore_auth", scopes = { + @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @ApiResponses(value = { @ApiResponse(code = 200, message = "successful operation") }) @RequestMapping(value = "/{petId}/uploadImage", diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java index 577052883c0e..802a44b0922a 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java @@ -10,6 +10,8 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +import io.swagger.annotations.AuthorizationScope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -30,11 +32,13 @@ import static org.springframework.http.MediaType.*; @Controller @RequestMapping(value = "/store", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class StoreApi { - @ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map") + @ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = { + @Authorization(value = "api_key") + }) @ApiResponses(value = { @ApiResponse(code = 200, message = "successful operation") }) @RequestMapping(value = "/inventory", @@ -70,9 +74,9 @@ public class StoreApi { @ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "Order not found"), @ApiResponse(code = 200, message = "successful operation"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 400, message = "Invalid ID supplied"), + @ApiResponse(code = 404, message = "Order not found") }) @RequestMapping(value = "/order/{orderId}", produces = { "application/json", "application/xml" }, @@ -90,8 +94,8 @@ public class StoreApi { @ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "Order not found"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 400, message = "Invalid ID supplied"), + @ApiResponse(code = 404, message = "Order not found") }) @RequestMapping(value = "/order/{orderId}", produces = { "application/json", "application/xml" }, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java index 6a68c27ae39f..45173ae4f332 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java @@ -10,6 +10,8 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +import io.swagger.annotations.AuthorizationScope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -30,7 +32,7 @@ import static org.springframework.http.MediaType.*; @Controller @RequestMapping(value = "/user", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class UserApi { @@ -128,9 +130,9 @@ public class UserApi { @ApiOperation(value = "Get user by user name", notes = "", response = User.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "User not found"), @ApiResponse(code = 200, message = "successful operation"), - @ApiResponse(code = 400, message = "Invalid username supplied") }) + @ApiResponse(code = 400, message = "Invalid username supplied"), + @ApiResponse(code = 404, message = "User not found") }) @RequestMapping(value = "/{username}", produces = { "application/json", "application/xml" }, @@ -148,8 +150,8 @@ public class UserApi { @ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "User not found"), - @ApiResponse(code = 400, message = "Invalid user supplied") }) + @ApiResponse(code = 400, message = "Invalid user supplied"), + @ApiResponse(code = 404, message = "User not found") }) @RequestMapping(value = "/{username}", produces = { "application/json", "application/xml" }, @@ -171,8 +173,8 @@ public class UserApi { @ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "User not found"), - @ApiResponse(code = 400, message = "Invalid username supplied") }) + @ApiResponse(code = 400, message = "Invalid username supplied"), + @ApiResponse(code = 404, message = "User not found") }) @RequestMapping(value = "/{username}", produces = { "application/json", "application/xml" }, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java index 58564e526261..cf98a04f667d 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java @@ -18,7 +18,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 //Loads the spring beans required by the framework @PropertySource("classpath:swagger.properties") @Import(SwaggerUiConfiguration.class) -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class SwaggerConfig { @Bean ApiInfo apiInfo() { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java index ead813573312..fed9a6a40bb5 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java @@ -8,7 +8,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration @EnableWebMvc -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class SwaggerUiConfiguration extends WebMvcConfigurerAdapter { private static final String[] SERVLET_RESOURCE_LOCATIONS = { "/" }; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java index 3c42b3f838ae..594ac497275f 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java @@ -2,7 +2,7 @@ package io.swagger.configuration; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class WebApplication extends AbstractAnnotationConfigDispatcherServletInitializer { @Override diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java index 4c973c218889..7873af49169d 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java @@ -3,7 +3,7 @@ package io.swagger.configuration; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class WebMvcConfiguration extends WebMvcConfigurationSupport { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java index d023688b5e50..349904a1b3ac 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java index 87b8633767a5..68e95b043806 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java index 5f4de45616e0..0f526087a96e 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java index 6b2b0e6c1163..f552fdbe5576 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java index 97044d2a1e7b..d1a0dc327a7d 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-16T21:16:24.594-04:00") public class User { private Long id = null; From b82333aea4309019245d92bdc483d45e2bd996fd Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 17 Oct 2015 16:30:19 +0800 Subject: [PATCH 13/78] Add support for top-level consumes and produces This reverts commit 0b4b5e8839cd3f447fde86e4aa2a8db8fc2985f6. --- .../io/swagger/codegen/CodegenConfig.java | 2 + .../io/swagger/codegen/DefaultCodegen.java | 50 ++++++- .../io/swagger/codegen/DefaultGenerator.java | 2 +- .../codegen/languages/SwiftCodegen.java | 6 +- .../java/io/swagger/codegen/CodegenTest.java | 48 +++++++ .../2_0/globalConsumesAndProduces.json | 130 ++++++++++++++++++ 6 files changed, 228 insertions(+), 10 deletions(-) create mode 100644 modules/swagger-codegen/src/test/resources/2_0/globalConsumesAndProduces.json diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java index 10d7363cc35a..b50147a6ff3e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java @@ -67,6 +67,8 @@ public interface CodegenConfig { CodegenModel fromModel(String name, Model model, Map allDefinitions); + CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation, Map definitions, Swagger swagger); + CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation, Map definitions); List fromSecurity(Map schemes); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 575f9742f507..5a7a5f9506c7 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -867,8 +867,12 @@ public class DefaultCodegen { } return responses.get(code); } - + public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions) { + return fromOperation(path, httpMethod, operation, definitions, null); + } + + public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions, Swagger swagger) { CodegenOperation op = CodegenModelFactory.newInstance(CodegenModelType.OPERATION); Set imports = new HashSet(); op.vendorExtensions = operation.getVendorExtensions(); @@ -904,15 +908,32 @@ public class DefaultCodegen { op.summary = escapeText(operation.getSummary()); op.notes = escapeText(operation.getDescription()); op.tags = operation.getTags(); + op.hasConsumes = false; + op.hasProduces = false; - if (operation.getConsumes() != null && operation.getConsumes().size() > 0) { + List consumes = new ArrayList(); + if (operation.getConsumes() != null) { + if (operation.getConsumes().size() > 0) { + // use consumes defined in the operation + consumes = operation.getConsumes(); + } else { + // empty list, do nothing to override global setting + } + } else if (swagger != null && swagger.getConsumes() != null && swagger.getConsumes().size() > 0) { + // use consumes defined globally + consumes = swagger.getConsumes(); + LOGGER.debug("No consumes defined in operation. Using global consumes (" + swagger.getConsumes() + ") for " + op.operationId); + } + + // if "consumes" is defined (per operation or using global definition) + if (consumes != null && consumes.size() > 0) { List> c = new ArrayList>(); int count = 0; - for (String key : operation.getConsumes()) { + for (String key : consumes) { Map mediaType = new HashMap(); mediaType.put("mediaType", key); count += 1; - if (count < operation.getConsumes().size()) { + if (count < consumes.size()) { mediaType.put("hasMore", "true"); } else { mediaType.put("hasMore", null); @@ -923,14 +944,29 @@ public class DefaultCodegen { op.hasConsumes = true; } - if (operation.getProduces() != null && operation.getProduces().size() > 0) { + List produces = new ArrayList(); + if (operation.getProduces() != null) { + if (operation.getProduces().size() > 0) { + // use produces defined in the operation + produces = operation.getProduces(); + } else { + // empty list, do nothing to override global setting + } + } else if (swagger != null && swagger.getProduces() != null && swagger.getProduces().size() > 0) { + // use produces defined globally + produces = swagger.getProduces(); + LOGGER.debug("No produces defined in operation. Using global produces (" + swagger.getProduces() + ") for " + op.operationId); + } + + // if "produces" is defined (per operation or using global definition) + if (produces != null && produces.size() > 0) { List> c = new ArrayList>(); int count = 0; - for (String key : operation.getProduces()) { + for (String key : produces) { Map mediaType = new HashMap(); mediaType.put("mediaType", key); count += 1; - if (count < operation.getProduces().size()) { + if (count < produces.size()) { mediaType.put("hasMore", "true"); } else { mediaType.put("hasMore", null); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 6fc8eecd045b..e85adfed97fa 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -471,7 +471,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { for (String tag : tags) { CodegenOperation co = null; try { - co = config.fromOperation(resourcePath, httpMethod, operation, swagger.getDefinitions()); + co = config.fromOperation(resourcePath, httpMethod, operation, swagger.getDefinitions(), swagger); co.tags = new ArrayList(); co.tags.add(sanitizeTag(tag)); config.addOperationToGroup(sanitizeTag(tag), resourcePath, operation, co, operations); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java index 55c3864adb7d..9bb1dfd61d47 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java @@ -1,9 +1,11 @@ package io.swagger.codegen.languages; import com.google.common.base.Predicate; + import com.google.common.collect.Iterators; import com.google.common.collect.Lists; import io.swagger.codegen.*; +import io.swagger.models.Swagger; import io.swagger.models.Model; import io.swagger.models.Operation; import io.swagger.models.parameters.HeaderParameter; @@ -256,7 +258,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { } @Override - public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions) { + public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions, Swagger swagger) { path = normalizePath(path); List parameters = operation.getParameters(); parameters = Lists.newArrayList(Iterators.filter(parameters.iterator(), new Predicate() { @@ -266,7 +268,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { } })); operation.setParameters(parameters); - return super.fromOperation(path, httpMethod, operation, definitions); + return super.fromOperation(path, httpMethod, operation, definitions, swagger); } private static String normalizePath(String path) { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java index ee70b427bfdf..0fa8953e7bf5 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java @@ -139,4 +139,52 @@ public class CodegenTest { Assert.assertTrue(op.bodyParam.isBinary); Assert.assertTrue(op.responses.get(0).isBinary); } + + @Test(description = "use operation consumes and produces") + public void localConsumesAndProducesTest() { + final Swagger model = new SwaggerParser().read("src/test/resources/2_0/globalConsumesAndProduces.json"); + final DefaultCodegen codegen = new DefaultCodegen(); + final String path = "/tests/localConsumesAndProduces"; + final Operation p = model.getPaths().get(path).getGet(); + CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model); + + Assert.assertTrue(op.hasConsumes); + Assert.assertEquals(op.consumes.size(), 1); + Assert.assertEquals(op.consumes.get(0).get("mediaType"), "application/json"); + Assert.assertTrue(op.hasProduces); + Assert.assertEquals(op.produces.size(), 1); + Assert.assertEquals(op.produces.get(0).get("mediaType"), "application/json"); + } + + @Test(description = "use spec consumes and produces") + public void globalConsumesAndProducesTest() { + final Swagger model = new SwaggerParser().read("src/test/resources/2_0/globalConsumesAndProduces.json"); + final DefaultCodegen codegen = new DefaultCodegen(); + final String path = "/tests/globalConsumesAndProduces"; + final Operation p = model.getPaths().get(path).getGet(); + CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model); + + Assert.assertTrue(op.hasConsumes); + Assert.assertEquals(op.consumes.size(), 1); + Assert.assertEquals(op.consumes.get(0).get("mediaType"), "application/global_consumes"); + Assert.assertTrue(op.hasProduces); + Assert.assertEquals(op.produces.size(), 1); + Assert.assertEquals(op.produces.get(0).get("mediaType"), "application/global_produces"); + } + + @Test(description = "use operation consumes and produces (reset in operation with empty array)") + public void localResetConsumesAndProducesTest() { + final Swagger model = new SwaggerParser().read("src/test/resources/2_0/globalConsumesAndProduces.json"); + final DefaultCodegen codegen = new DefaultCodegen(); + final String path = "/tests/localResetConsumesAndProduces"; + final Operation p = model.getPaths().get(path).getGet(); + CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model); + + Assert.assertNotNull(op); + Assert.assertFalse(op.hasConsumes); + Assert.assertNull(op.consumes); + Assert.assertFalse(op.hasProduces); + Assert.assertNull(op.produces); + + } } diff --git a/modules/swagger-codegen/src/test/resources/2_0/globalConsumesAndProduces.json b/modules/swagger-codegen/src/test/resources/2_0/globalConsumesAndProduces.json new file mode 100644 index 000000000000..520218ed707e --- /dev/null +++ b/modules/swagger-codegen/src/test/resources/2_0/globalConsumesAndProduces.json @@ -0,0 +1,130 @@ +{ + "swagger": "2.0", + "info": { + "description": "Spec for testing global consumes and produces", + "version": "1.0.0", + "title": "Swagger Petstore", + "termsOfService": "http://swagger.io/terms/", + "contact": { + "email": "apiteam@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + } + }, + "host": "petstore.swagger.io", + "basePath": "/v2", + "consumes": ["application/global_consumes"], + "produces": ["application/global_produces"], + "schemes": [ + "http" + ], + "paths": { + "/tests/localConsumesAndProduces": { + "get": { + "tags": [ + "tests" + ], + "summary": "Operation with local consumes and produces", + "description": "", + "operationId": "localConsumesAndProduces", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + ], + "responses": { + "200": { + "description": "successful operation. Returning a simple int.", + "schema": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "/tests/globalConsumesAndProduces": { + "get": { + "tags": [ + "tests" + ], + "summary": "Operation with global consumes and produces", + "description": "", + "operationId": "globalConsumesAndProduces", + "parameters": [ + ], + "responses": { + "200": { + "description": "successful operation. Returning a simple int.", + "schema": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "/tests/localResetConsumesAndProduces": { + "get": { + "tags": [ + "tests" + ], + "summary": "Operation with local consumes and produces set to empty (reset)", + "description": "", + "operationId": "localResetConsumesAndProduces", + "parameters": [ + ], + "consumes": [], + "produces": [], + "responses": { + "200": { + "description": "successful operation. Returning a simple int.", + "schema": { + "type": "integer", + "format": "int64" + } + } + } + } + } + + }, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "name": "api_key", + "in": "header" + }, + "petstore_auth": { + "type": "oauth2", + "authorizationUrl": "http://petstore.swagger.io/api/oauth/dialog", + "flow": "implicit", + "scopes": { + "write:pets": "modify pets in your account", + "read:pets": "read your pets" + } + } + }, + "definitions": { + "CustomModel": { + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string", + "example": "doggie" + } + } + } + } +} From e8fbdaabe3171776b648e868c42d737f0a92576c Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 17 Oct 2015 16:44:55 +0800 Subject: [PATCH 14/78] replace tabs with spaces --- .../io/swagger/codegen/DefaultCodegen.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 5a7a5f9506c7..2a666c076277 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -913,16 +913,16 @@ public class DefaultCodegen { List consumes = new ArrayList(); if (operation.getConsumes() != null) { - if (operation.getConsumes().size() > 0) { - // use consumes defined in the operation - consumes = operation.getConsumes(); - } else { - // empty list, do nothing to override global setting - } + if (operation.getConsumes().size() > 0) { + // use consumes defined in the operation + consumes = operation.getConsumes(); + } else { + // empty list, do nothing to override global setting + } } else if (swagger != null && swagger.getConsumes() != null && swagger.getConsumes().size() > 0) { - // use consumes defined globally - consumes = swagger.getConsumes(); - LOGGER.debug("No consumes defined in operation. Using global consumes (" + swagger.getConsumes() + ") for " + op.operationId); + // use consumes defined globally + consumes = swagger.getConsumes(); + LOGGER.debug("No consumes defined in operation. Using global consumes (" + swagger.getConsumes() + ") for " + op.operationId); } // if "consumes" is defined (per operation or using global definition) @@ -946,16 +946,16 @@ public class DefaultCodegen { List produces = new ArrayList(); if (operation.getProduces() != null) { - if (operation.getProduces().size() > 0) { - // use produces defined in the operation - produces = operation.getProduces(); - } else { - // empty list, do nothing to override global setting - } + if (operation.getProduces().size() > 0) { + // use produces defined in the operation + produces = operation.getProduces(); + } else { + // empty list, do nothing to override global setting + } } else if (swagger != null && swagger.getProduces() != null && swagger.getProduces().size() > 0) { - // use produces defined globally - produces = swagger.getProduces(); - LOGGER.debug("No produces defined in operation. Using global produces (" + swagger.getProduces() + ") for " + op.operationId); + // use produces defined globally + produces = swagger.getProduces(); + LOGGER.debug("No produces defined in operation. Using global produces (" + swagger.getProduces() + ") for " + op.operationId); } // if "produces" is defined (per operation or using global definition) From 3cf1f1a56a8b6b4ba9b19b403fa54b2574ef38c0 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 18 Oct 2015 20:51:55 -0700 Subject: [PATCH 15/78] added support for array and model inline types --- .../swagger/codegen/InlineModelResolver.java | 180 +++++++++++++++--- .../codegen/InlineModelResolverTest.java | 117 +++++++++++- 2 files changed, 266 insertions(+), 31 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index c285faf73bfe..3e64334f8e39 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -3,9 +3,9 @@ package io.swagger.codegen; import io.swagger.models.*; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; -import io.swagger.models.properties.ObjectProperty; -import io.swagger.models.properties.Property; -import io.swagger.models.properties.RefProperty; +import io.swagger.models.parameters.RefParameter; +import io.swagger.models.properties.*; +import io.swagger.util.Json; import java.util.ArrayList; import java.util.HashMap; @@ -14,12 +14,18 @@ import java.util.Map; public class InlineModelResolver { private Swagger swagger = null; + private boolean skipMatches = false; Map addedModels = new HashMap(); + Map generatedSignature = new HashMap(); public void flatten(Swagger swagger) { this.swagger = swagger; + if(swagger.getDefinitions() == null) { + swagger.setDefinitions(new HashMap()); + } + // operations Map paths = swagger.getPaths(); Map models = swagger.getDefinitions(); @@ -35,24 +41,20 @@ public class InlineModelResolver { for(Parameter parameter : parameters) { if(parameter instanceof BodyParameter) { BodyParameter bp = (BodyParameter) parameter; - if(bp.getSchema() != null) { Model model = bp.getSchema(); if(model instanceof ModelImpl) { - String name = bp.getName(); - - if(models == null) { - models = new HashMap(); - swagger.setDefinitions(models); + String existing = matchGenerated(model); + if(existing != null) { + bp.setSchema(new RefModel(existing)); } else { - if (swagger.getDefinitions().containsKey(bp.getName())) { - name += "_" + "inline"; - } + String name = uniqueName(bp.getName()); + bp.setSchema(new RefModel(name)); + addGenerated(name, model); + swagger.addDefinition(name, model); } - swagger.addDefinition(name, model); - bp.setSchema(new RefModel(name)); } } } @@ -68,8 +70,44 @@ public class InlineModelResolver { String modelName = uniqueName("inline_response_" + key); ObjectProperty op = (ObjectProperty) property; Model model = modelFromProperty(op, modelName); - response.setSchema(new RefProperty(modelName)); - swagger.addDefinition(modelName, model); + String existing = matchGenerated(model); + if(existing != null) { + response.setSchema(new RefProperty(existing)); + } + else { + response.setSchema(new RefProperty(modelName)); + addGenerated(modelName, model); + swagger.addDefinition(modelName, model); + } + } + else if(property instanceof ArrayProperty) { + String modelName = uniqueName("inline_response_" + key); + ArrayProperty ap = (ArrayProperty) property; + Model model = modelFromProperty(ap, modelName); + if(model != null) { + String existing = matchGenerated(model); + if (existing != null) { + response.setSchema(new RefProperty(existing)); + } else { + response.setSchema(new RefProperty(modelName)); + addGenerated(modelName, model); + swagger.addDefinition(modelName, model); + } + } + } + else if(property instanceof MapProperty) { + MapProperty op = (MapProperty) property; + String modelName = uniqueName("inline_response_" + key); + Model model = modelFromProperty(op, modelName); + String existing = matchGenerated(model); + if(existing != null) { + response.setSchema(new RefProperty(existing)); + } + else { + response.setSchema(new RefProperty(modelName)); + addGenerated(modelName, model); + swagger.addDefinition(modelName, model); + } } } } @@ -88,15 +126,24 @@ public class InlineModelResolver { Map properties = m.getProperties(); flattenProperties(properties, modelName); + } else if (model instanceof ArrayModel) { ArrayModel m = (ArrayModel) model; Property inner = m.getItems(); if(inner instanceof ObjectProperty) { - String innerModelName = uniqueName(modelName + "_" + inner); - Model innerModel = modelFromProperty((ObjectProperty)inner, modelName); - swagger.addDefinition(innerModelName, innerModel); - m.setItems(new RefProperty(innerModelName)); + String innerModelName = uniqueName(modelName + "_inner"); + Model innerModel = modelFromProperty((ObjectProperty) inner, modelName); + + String existing = matchGenerated(innerModel); + if(existing == null) { + swagger.addDefinition(innerModelName, innerModel); + addGenerated(innerModelName, innerModel); + m.setItems(new RefProperty(innerModelName)); + } + else { + m.setItems(new RefProperty(existing)); + } } } else if (model instanceof ComposedModel) { @@ -106,6 +153,21 @@ public class InlineModelResolver { } } + public String matchGenerated(Model model) { + if(this.skipMatches) { + return null; + } + String json = Json.pretty(model); + if(generatedSignature.containsKey(json)) { + return generatedSignature.get(json); + } + return null; + } + + public void addGenerated(String name, Model model) { + generatedSignature.put(Json.pretty(model), name); + } + public String uniqueName(String key) { int count = 0; boolean done = false; @@ -135,11 +197,22 @@ public class InlineModelResolver { Property property = properties.get(key); if(property instanceof ObjectProperty) { String modelName = uniqueName(path + "_" + key); + + ObjectProperty op = (ObjectProperty) property; Model model = modelFromProperty(op, modelName); - modelsToAdd.put(modelName, model); - propsToUpdate.put(key, new RefProperty(modelName)); + String existing = matchGenerated(model); + + if(existing != null) { + propsToUpdate.put(key, new RefProperty(existing)); + } + else { + propsToUpdate.put(key, new RefProperty(modelName)); + modelsToAdd.put(modelName, model); + addGenerated(modelName, model); + swagger.addDefinition(modelName, model); + } } } if(propsToUpdate.size() > 0) { @@ -153,6 +226,41 @@ public class InlineModelResolver { } } + public Model modelFromProperty(ArrayProperty object, String path) { + String access = object.getAccess(); + String description = object.getDescription(); + String example = object.getExample(); + String name = object.getName(); + Integer position = object.getPosition(); + Boolean readOnly = object.getReadOnly(); + Boolean required = object.getRequired(); + String title = object.getTitle(); + Map extensions = object.getVendorExtensions(); + Xml xml = object.getXml(); + +// object.getItems() +// Map properties = object.getProperties(); + + Property inner = object.getItems(); + if(inner instanceof ObjectProperty) { + ArrayModel model = new ArrayModel(); + model.setDescription(description); + model.setExample(example); +// model.setName(name); +// model.setXml(xml); + + model.setItems(object.getItems()); + return model; + } + +// if(properties != null) { +// flattenProperties(properties, path); +// model.setProperties(properties); +// } + + return null; + } + public Model modelFromProperty(ObjectProperty object, String path) { String access = object.getAccess(); String description = object.getDescription(); @@ -180,4 +288,32 @@ public class InlineModelResolver { return model; } + + public Model modelFromProperty(MapProperty object, String path) { + String access = object.getAccess(); + String description = object.getDescription(); + String example = object.getExample(); + String name = object.getName(); + Integer position = object.getPosition(); + Boolean readOnly = object.getReadOnly(); + Boolean required = object.getRequired(); + String title = object.getTitle(); + Map extensions = object.getVendorExtensions(); + Xml xml = object.getXml(); + + ArrayModel model = new ArrayModel(); + model.setDescription(description); + model.setExample(example); + model.setItems(object.getAdditionalProperties()); + + return model; + } + + public boolean isSkipMatches() { + return skipMatches; + } + + public void setSkipMatches(boolean skipMatches) { + this.skipMatches = skipMatches; + } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index e922e0d6e2fa..7affd97749aa 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -4,11 +4,17 @@ package io.swagger.codegen; import io.swagger.models.*; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; -import io.swagger.models.properties.ObjectProperty; -import io.swagger.models.properties.StringProperty; +import io.swagger.models.properties.*; import io.swagger.util.Json; import org.junit.Test; +import java.lang.reflect.Array; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + public class InlineModelResolverTest { @Test public void resolveInlineModelTest() throws Exception { @@ -31,7 +37,15 @@ public class InlineModelResolverTest { new InlineModelResolver().flatten(swagger); - Json.prettyPrint(swagger); + ModelImpl user = (ModelImpl)swagger.getDefinitions().get("User"); + + assertNotNull(user); + assertTrue(user.getProperties().get("address") instanceof RefProperty); + + ModelImpl address = (ModelImpl)swagger.getDefinitions().get("User_address"); + assertNotNull(address); + assertNotNull(address.getProperties().get("city")); + assertNotNull(address.getProperties().get("street")); } @Test @@ -50,12 +64,18 @@ public class InlineModelResolverTest { .vendorExtension("x-foo", "bar") .description("it works!") .schema(new ObjectProperty() - .vendorExtension("x-baz", "boo") - .property("name", new StringProperty() - .vendorExtension("x-bars", "bleh")))))); + .property("name", new StringProperty()))))); new InlineModelResolver().flatten(swagger); - Json.prettyPrint(swagger); + Map responses = swagger.getPaths().get("/foo/bar").getGet().getResponses(); + + Response response = responses.get("200"); + assertNotNull(response); + assertTrue(response.getSchema() instanceof RefProperty); + + ModelImpl model = (ModelImpl)swagger.getDefinitions().get("inline_response_200"); + assertTrue(model.getProperties().size() == 1); + assertNotNull(model.getProperties().get("name")); } @Test @@ -76,7 +96,12 @@ public class InlineModelResolverTest { new InlineModelResolver().flatten(swagger); - Json.prettyPrint(swagger); + Model model = swagger.getDefinitions().get("User"); + assertTrue(model instanceof ArrayModel); + + Model user = swagger.getDefinitions().get("User_inner"); + assertNotNull(user); + assertEquals("description", user.getDescription()); } @Test @@ -92,6 +117,80 @@ public class InlineModelResolverTest { new InlineModelResolver().flatten(swagger); - Json.prettyPrint(swagger); + Operation operation = swagger.getPaths().get("/hello").getGet(); + BodyParameter bp = (BodyParameter)operation.getParameters().get(0); + assertTrue(bp.getSchema() instanceof RefModel); + + Model body = swagger.getDefinitions().get("body"); + assertTrue(body instanceof ModelImpl); + + ModelImpl impl = (ModelImpl) body; + assertNotNull(impl.getProperties().get("name")); + } + + @Test + public void resolveInlineArrayResponse() throws Exception { + Swagger swagger = new Swagger(); + + swagger.path("/foo/baz", new Path() + .get(new Operation() + .response(200, new Response() + .vendorExtension("x-foo", "bar") + .description("it works!") + .schema(new ArrayProperty() + .items( + new ObjectProperty() + .property("name", new StringProperty())))))); + + new InlineModelResolver().flatten(swagger); + + Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200"); + assertNotNull(response); + + assertNotNull(response.getSchema()); + Property responseProperty = response.getSchema(); + assertTrue(responseProperty instanceof RefProperty); + + Model inline = swagger.getDefinitions().get("inline_response_200"); + assertNotNull(inline); + assertTrue(inline instanceof ArrayModel); + + ArrayModel am = (ArrayModel) inline; + assertTrue(am.getItems() instanceof RefProperty); + + Model inlineInner = swagger.getDefinitions().get("inline_response_200_inner"); + assertNotNull(inlineInner); + assertTrue(inlineInner instanceof ModelImpl); + + ModelImpl innerModel = (ModelImpl) inlineInner; + assertTrue(innerModel.getProperties().size() == 1); + assertNotNull(innerModel.getProperties().get("name")); + } + + @Test + public void testInlineMapResponse() throws Exception { + Swagger swagger = new Swagger(); + + MapProperty schema = new MapProperty(); + schema.setAdditionalProperties(new StringProperty()); + + swagger.path("/foo/baz", new Path() + .get(new Operation() + .response(200, new Response() + .vendorExtension("x-foo", "bar") + .description("it works!") + .schema(schema)))); + new InlineModelResolver().flatten(swagger); + + Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200"); + + Property property = response.getSchema(); + assertTrue(property instanceof RefProperty); + + Model inline = swagger.getDefinitions().get("inline_response_200"); + assertTrue(inline instanceof ArrayModel); + ArrayModel am = (ArrayModel) inline; + Property innerProperty = am.getItems(); + assertTrue(innerProperty instanceof StringProperty); } } From 89dc4d29ab615e5f6c810f70f54cda7d97e4c873 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 18 Oct 2015 21:05:57 -0700 Subject: [PATCH 16/78] added map support --- .../swagger/codegen/InlineModelResolver.java | 117 ++++++++---------- .../codegen/InlineModelResolverTest.java | 26 ++++ 2 files changed, 78 insertions(+), 65 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 3e64334f8e39..5cd2961f6f41 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -22,7 +22,7 @@ public class InlineModelResolver { public void flatten(Swagger swagger) { this.swagger = swagger; - if(swagger.getDefinitions() == null) { + if (swagger.getDefinitions() == null) { swagger.setDefinitions(new HashMap()); } @@ -30,61 +30,55 @@ public class InlineModelResolver { Map paths = swagger.getPaths(); Map models = swagger.getDefinitions(); - if(paths != null) { - for(String pathname : paths.keySet()) { + if (paths != null) { + for (String pathname : paths.keySet()) { Path path = paths.get(pathname); - for(Operation operation: path.getOperations()) { + for (Operation operation : path.getOperations()) { List parameters = operation.getParameters(); - if(parameters != null) { - for(Parameter parameter : parameters) { - if(parameter instanceof BodyParameter) { + if (parameters != null) { + for (Parameter parameter : parameters) { + if (parameter instanceof BodyParameter) { BodyParameter bp = (BodyParameter) parameter; - if(bp.getSchema() != null) { + if (bp.getSchema() != null) { Model model = bp.getSchema(); - - if(model instanceof ModelImpl) { - String existing = matchGenerated(model); - if(existing != null) { - bp.setSchema(new RefModel(existing)); - } - else { - String name = uniqueName(bp.getName()); - bp.setSchema(new RefModel(name)); - addGenerated(name, model); - swagger.addDefinition(name, model); - } + String existing = matchGenerated(model); + if (existing != null) { + bp.setSchema(new RefModel(existing)); + } else { + String name = uniqueName(bp.getName()); + bp.setSchema(new RefModel(name)); + addGenerated(name, model); + swagger.addDefinition(name, model); } } } } } Map responses = operation.getResponses(); - if(responses != null) { - for(String key : responses.keySet()) { + if (responses != null) { + for (String key : responses.keySet()) { Response response = responses.get(key); - if(response.getSchema() != null) { + if (response.getSchema() != null) { Property property = response.getSchema(); - if(property instanceof ObjectProperty) { + if (property instanceof ObjectProperty) { String modelName = uniqueName("inline_response_" + key); ObjectProperty op = (ObjectProperty) property; Model model = modelFromProperty(op, modelName); String existing = matchGenerated(model); - if(existing != null) { + if (existing != null) { response.setSchema(new RefProperty(existing)); - } - else { + } else { response.setSchema(new RefProperty(modelName)); addGenerated(modelName, model); swagger.addDefinition(modelName, model); } - } - else if(property instanceof ArrayProperty) { + } else if (property instanceof ArrayProperty) { String modelName = uniqueName("inline_response_" + key); ArrayProperty ap = (ArrayProperty) property; Model model = modelFromProperty(ap, modelName); - if(model != null) { + if (model != null) { String existing = matchGenerated(model); if (existing != null) { response.setSchema(new RefProperty(existing)); @@ -94,16 +88,14 @@ public class InlineModelResolver { swagger.addDefinition(modelName, model); } } - } - else if(property instanceof MapProperty) { + } else if (property instanceof MapProperty) { MapProperty op = (MapProperty) property; String modelName = uniqueName("inline_response_" + key); Model model = modelFromProperty(op, modelName); String existing = matchGenerated(model); - if(existing != null) { + if (existing != null) { response.setSchema(new RefProperty(existing)); - } - else { + } else { response.setSchema(new RefProperty(modelName)); addGenerated(modelName, model); swagger.addDefinition(modelName, model); @@ -117,36 +109,33 @@ public class InlineModelResolver { } // definitions - if(models != null) { + if (models != null) { List modelNames = new ArrayList(models.keySet()); - for(String modelName : modelNames) { + for (String modelName : modelNames) { Model model = models.get(modelName); - if(model instanceof ModelImpl) { + if (model instanceof ModelImpl) { ModelImpl m = (ModelImpl) model; Map properties = m.getProperties(); flattenProperties(properties, modelName); - } - else if (model instanceof ArrayModel) { + } else if (model instanceof ArrayModel) { ArrayModel m = (ArrayModel) model; Property inner = m.getItems(); - if(inner instanceof ObjectProperty) { + if (inner instanceof ObjectProperty) { String innerModelName = uniqueName(modelName + "_inner"); Model innerModel = modelFromProperty((ObjectProperty) inner, modelName); String existing = matchGenerated(innerModel); - if(existing == null) { + if (existing == null) { swagger.addDefinition(innerModelName, innerModel); addGenerated(innerModelName, innerModel); m.setItems(new RefProperty(innerModelName)); - } - else { + } else { m.setItems(new RefProperty(existing)); } } - } - else if (model instanceof ComposedModel) { + } else if (model instanceof ComposedModel) { ComposedModel m = (ComposedModel) model; } } @@ -154,11 +143,11 @@ public class InlineModelResolver { } public String matchGenerated(Model model) { - if(this.skipMatches) { + if (this.skipMatches) { return null; } String json = Json.pretty(model); - if(generatedSignature.containsKey(json)) { + if (generatedSignature.containsKey(json)) { return generatedSignature.get(json); } return null; @@ -171,15 +160,14 @@ public class InlineModelResolver { public String uniqueName(String key) { int count = 0; boolean done = false; - while(!done) { + while (!done) { String name = key; - if(count > 0) { + if (count > 0) { name = key + "_" + count; } - if(swagger.getDefinitions() == null) { + if (swagger.getDefinitions() == null) { return name; - } - else if (!swagger.getDefinitions().containsKey(name)) { + } else if (!swagger.getDefinitions().containsKey(name)) { return name; } count += 1; @@ -188,14 +176,14 @@ public class InlineModelResolver { } public void flattenProperties(Map properties, String path) { - if(properties == null) { + if (properties == null) { return; } Map propsToUpdate = new HashMap(); Map modelsToAdd = new HashMap(); - for(String key : properties.keySet()) { + for (String key : properties.keySet()) { Property property = properties.get(key); - if(property instanceof ObjectProperty) { + if (property instanceof ObjectProperty) { String modelName = uniqueName(path + "_" + key); @@ -204,10 +192,9 @@ public class InlineModelResolver { String existing = matchGenerated(model); - if(existing != null) { + if (existing != null) { propsToUpdate.put(key, new RefProperty(existing)); - } - else { + } else { propsToUpdate.put(key, new RefProperty(modelName)); modelsToAdd.put(modelName, model); addGenerated(modelName, model); @@ -215,14 +202,14 @@ public class InlineModelResolver { } } } - if(propsToUpdate.size() > 0) { - for(String key : propsToUpdate.keySet()) { + if (propsToUpdate.size() > 0) { + for (String key : propsToUpdate.keySet()) { properties.put(key, propsToUpdate.get(key)); } } - for(String key : modelsToAdd.keySet()) { + for (String key : modelsToAdd.keySet()) { swagger.addDefinition(key, modelsToAdd.get(key)); - this.addedModels.put(key, modelsToAdd.get(key)); + this.addedModels.put(key, modelsToAdd.get(key)); } } @@ -242,7 +229,7 @@ public class InlineModelResolver { // Map properties = object.getProperties(); Property inner = object.getItems(); - if(inner instanceof ObjectProperty) { + if (inner instanceof ObjectProperty) { ArrayModel model = new ArrayModel(); model.setDescription(description); model.setExample(example); @@ -281,7 +268,7 @@ public class InlineModelResolver { model.setName(name); model.setXml(xml); - if(properties != null) { + if (properties != null) { flattenProperties(properties, path); model.setProperties(properties); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index 7affd97749aa..5557d97e64c2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -1,6 +1,7 @@ package io.swagger.codegen; +import com.sun.xml.internal.ws.wsdl.writer.document.soap.Body; import io.swagger.models.*; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; @@ -128,6 +129,31 @@ public class InlineModelResolverTest { assertNotNull(impl.getProperties().get("name")); } + @Test + public void resolveInlineArrayBodyParameter() throws Exception { + Swagger swagger = new Swagger(); + + swagger.path("/hello", new Path() + .get(new Operation() + .parameter(new BodyParameter() + .name("body") + .schema(new ArrayModel() + .items(new StringProperty()))))); + + new InlineModelResolver().flatten(swagger); + + Parameter param = swagger.getPaths().get("/hello").getGet().getParameters().get(0); + assertTrue(param instanceof BodyParameter); + + BodyParameter bp = (BodyParameter) param; + Model schema = bp.getSchema(); + + assertTrue(schema instanceof RefModel); + + Model model = swagger.getDefinitions().get("body"); + assertTrue(model instanceof ArrayModel); + } + @Test public void resolveInlineArrayResponse() throws Exception { Swagger swagger = new Swagger(); From 002feb3e7c0988872e960d52dedb244820e9c3ed Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 18 Oct 2015 21:10:13 -0700 Subject: [PATCH 17/78] build error --- .../java/io/swagger/codegen/InlineModelResolverTest.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index 5557d97e64c2..d3644392212c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -1,20 +1,15 @@ package io.swagger.codegen; -import com.sun.xml.internal.ws.wsdl.writer.document.soap.Body; import io.swagger.models.*; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.*; -import io.swagger.util.Json; -import org.junit.Test; +import org.testng.annotations.Test; -import java.lang.reflect.Array; import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.testng.AssertJUnit.*; public class InlineModelResolverTest { @Test From b054cd3cc6f6b053b50a4e1bd9f788ee2ba069b9 Mon Sep 17 00:00:00 2001 From: akkie Date: Thu, 15 Oct 2015 15:09:55 +0200 Subject: [PATCH 18/78] Deserialize the response body in case of an ApiException Currently it's not possible to use custom models in the ApiException because the body gets not deserialized to Json and therefore the object deserializer cannot deserialize it to a custom model. This pull request uses the same mechanism as used to deserialize the response body in case of a 2xx status code. --- .../src/main/resources/php/ApiClient.mustache | 5 ++++ .../main/resources/php/ApiException.mustache | 26 +++++++++---------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache index 9db41df2aeec..e46edda63b77 100644 --- a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache @@ -239,6 +239,11 @@ class ApiClient $data = $http_body; } } else { + $data = json_decode($http_body); + if (json_last_error() > 0) { // if response is a string + $data = $http_body; + } + throw new ApiException( "[".$response_info['http_code']."] Error connecting to the API ($url)", $response_info['http_code'], $http_header, $http_body diff --git a/modules/swagger-codegen/src/main/resources/php/ApiException.mustache b/modules/swagger-codegen/src/main/resources/php/ApiException.mustache index 79d1b4fe0a15..b9022f42a901 100644 --- a/modules/swagger-codegen/src/main/resources/php/ApiException.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ApiException.mustache @@ -46,30 +46,30 @@ use \Exception; class ApiException extends Exception { - /** - * The HTTP body of the server response. - * @var string + /** + * The HTTP body of the server response either as Json or string. + * @var mixed */ protected $responseBody; - + /** * The HTTP header of the server response. * @var string[] */ protected $responseHeaders; - + /** * The deserialized response object * @var $responseObject; */ protected $responseObject; - + /** * Constructor * @param string $message Error message - * @param string $code HTTP status code + * @param int $code HTTP status code * @param string $responseHeaders HTTP response header - * @param string $responseBody Deseralized response object + * @param mixed $responseBody HTTP body of the server response either as Json or string */ public function __construct($message="", $code=0, $responseHeaders=null, $responseBody=null) { @@ -77,7 +77,7 @@ class ApiException extends Exception $this->responseHeaders = $responseHeaders; $this->responseBody = $responseBody; } - + /** * Gets the HTTP response header * @@ -87,17 +87,17 @@ class ApiException extends Exception { return $this->responseHeaders; } - + /** - * Gets the HTTP response body + * Gets the HTTP body of the server response either as Json or string * - * @return string HTTP response body + * @return mixed HTTP body of the server response either as Json or string */ public function getResponseBody() { return $this->responseBody; } - + /** * Sets the deseralized response object (during deserialization) * @param mixed $obj Deserialized response object From 1b0963ebe045f66e12217ee13f4f04aef618fb23 Mon Sep 17 00:00:00 2001 From: Robin Eggenkamp Date: Mon, 19 Oct 2015 11:59:26 +0200 Subject: [PATCH 19/78] Minimal changes to upgrade to Alamofire 3.0.0 --- .../swift/AlamofireImplementations.mustache | 18 +++++++----------- .../src/main/resources/swift/Cartfile.mustache | 2 +- .../src/main/resources/swift/Podspec.mustache | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache index 21791168ab2f..dbc25584886c 100644 --- a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache @@ -75,29 +75,26 @@ class AlamofireRequestBuilder: RequestBuilder { request.authenticate(usingCredential: credential) } - request.responseJSON(options: .AllowFragments) { (req, res, result) in + request.responseJSON(options: .AllowFragments) { response in managerStore.removeValueForKey(managerId) - if result.isFailure { - completion(response: nil, erorr: result.error) + if response.result.isFailure { + completion(response: nil, erorr: response.result.error) return } if () is T { - let response = Response(response: res!, body: () as! T) - completion(response: response, erorr: nil) + completion(response: Response(response: response.response!, body: () as! T), erorr: nil) return } - if let json: AnyObject = result.value { + if let json: AnyObject = response.result.value { let body = Decoders.decode(clazz: T.self, source: json) - let response = Response(response: res!, body: body) - completion(response: response, erorr: nil) + completion(response: Response(response: response.response!, body: body), erorr: nil) return } else if "" is T { // swagger-parser currently doesn't support void, which will be fixed in future swagger-parser release // https://github.com/swagger-api/swagger-parser/pull/34 - let response = Response(response: res!, body: "" as! T) - completion(response: response, erorr: nil) + completion(response: Response(response: response.response!, body: "" as! T), erorr: nil) return } @@ -113,4 +110,3 @@ class AlamofireRequestBuilder: RequestBuilder { return httpHeaders } } - diff --git a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache index e36e0eedabdc..c27fd0c14d12 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache @@ -1,2 +1,2 @@ -github "Alamofire/Alamofire" >= 2.0.0{{#usePromiseKit}} +github "Alamofire/Alamofire" >= 3.0.0{{#usePromiseKit}} github "mxcl/PromiseKit" >=1.5.3{{/usePromiseKit}} diff --git a/modules/swagger-codegen/src/main/resources/swift/Podspec.mustache b/modules/swagger-codegen/src/main/resources/swift/Podspec.mustache index e359edaff671..5cf337ad6f2a 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Podspec.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Podspec.mustache @@ -16,5 +16,5 @@ Pod::Spec.new do |s| s.documentation_url = '{{podDocumentationURL}}'{{/podDocumentationURL}} s.source_files = '{{projectName}}/Classes/Swaggers/**/*.swift'{{#usePromiseKit}} s.dependency 'PromiseKit', '~> 2.1'{{/usePromiseKit}} - s.dependency 'Alamofire', '~> 2.0.0' + s.dependency 'Alamofire', '~> 3.0.0' end From 84b7302f12a3377c396a3b99e312511b7b6a522e Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 21:34:42 -0700 Subject: [PATCH 20/78] updated swagger-core version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d2cbadb394fd..b2132a048b2b 100644 --- a/pom.xml +++ b/pom.xml @@ -519,7 +519,7 @@ 1.0.11-SNAPSHOT 2.11.1 2.3.4 - 1.5.4-SNAPSHOT + 1.5.4 2.1.4 2.3 1.2 From eeaf4071f902534d3419cad0bf14b80b7f8dc2de Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 21:35:45 -0700 Subject: [PATCH 21/78] updated to not flatten array, map properties in responses unless necessary --- .../swagger/codegen/InlineModelResolver.java | 47 ++++++++------ .../codegen/InlineModelResolverTest.java | 65 +++++++++++++++++-- 2 files changed, 89 insertions(+), 23 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 5cd2961f6f41..e137b8843c62 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -75,31 +75,41 @@ public class InlineModelResolver { swagger.addDefinition(modelName, model); } } else if (property instanceof ArrayProperty) { - String modelName = uniqueName("inline_response_" + key); ArrayProperty ap = (ArrayProperty) property; - Model model = modelFromProperty(ap, modelName); - if (model != null) { - String existing = matchGenerated(model); + if(ap.getItems() instanceof ObjectProperty) { + ObjectProperty op = (ObjectProperty) ap.getItems(); + Map props = op.getProperties(); + flattenProperties(props, "path"); + } + } else if (property instanceof MapProperty) { + MapProperty op = (MapProperty) property; + + Property innerProperty = op.getAdditionalProperties(); + if(innerProperty instanceof ObjectProperty) { + ModelImpl innerModel = new ModelImpl(); + // TODO: model props + innerModel.setTitle(property.getTitle()); + property.getVendorExtensions(); + property.getRequired(); + property.getReadOnly(); + property.getAccess(); + innerModel.setDescription(property.getDescription()); + innerModel.setExample(property.getExample()); + innerModel.setName(property.getName()); + innerModel.setXml(property.getXml()); + + innerModel.setAdditionalProperties(innerProperty); + + String modelName = uniqueName("inline_response_" + key); + String existing = matchGenerated(innerModel); if (existing != null) { response.setSchema(new RefProperty(existing)); } else { response.setSchema(new RefProperty(modelName)); - addGenerated(modelName, model); - swagger.addDefinition(modelName, model); + addGenerated(modelName, innerModel); + swagger.addDefinition(modelName, innerModel); } } - } else if (property instanceof MapProperty) { - MapProperty op = (MapProperty) property; - String modelName = uniqueName("inline_response_" + key); - Model model = modelFromProperty(op, modelName); - String existing = matchGenerated(model); - if (existing != null) { - response.setSchema(new RefProperty(existing)); - } else { - response.setSchema(new RefProperty(modelName)); - addGenerated(modelName, model); - swagger.addDefinition(modelName, model); - } } } } @@ -186,7 +196,6 @@ public class InlineModelResolver { if (property instanceof ObjectProperty) { String modelName = uniqueName(path + "_" + key); - ObjectProperty op = (ObjectProperty) property; Model model = modelFromProperty(op, modelName); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index d3644392212c..474cfad86e64 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -5,6 +5,7 @@ import io.swagger.models.*; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.*; +import io.swagger.util.Json; import org.testng.annotations.Test; import java.util.Map; @@ -195,6 +196,30 @@ public class InlineModelResolverTest { MapProperty schema = new MapProperty(); schema.setAdditionalProperties(new StringProperty()); + swagger.path("/foo/baz", new Path() + .get(new Operation() + .response(200, new Response() + .vendorExtension("x-foo", "bar") + .description("it works!") + .schema(schema)))); + new InlineModelResolver().flatten(swagger); + Json.prettyPrint(swagger); + + Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200"); + + Property property = response.getSchema(); + assertTrue(property instanceof MapProperty); + assertTrue(swagger.getDefinitions().size() == 0); + } + + @Test + public void testInlineMapResponseWithObjectProperty() throws Exception { + Swagger swagger = new Swagger(); + + MapProperty schema = new MapProperty(); + schema.setAdditionalProperties(new ObjectProperty() + .property("name", new StringProperty())); + swagger.path("/foo/baz", new Path() .get(new Operation() .response(200, new Response() @@ -209,9 +234,41 @@ public class InlineModelResolverTest { assertTrue(property instanceof RefProperty); Model inline = swagger.getDefinitions().get("inline_response_200"); - assertTrue(inline instanceof ArrayModel); - ArrayModel am = (ArrayModel) inline; - Property innerProperty = am.getItems(); - assertTrue(innerProperty instanceof StringProperty); + assertTrue(inline instanceof ModelImpl); + ModelImpl impl = (ModelImpl) inline; + + Property innerProperty = impl.getAdditionalProperties(); + assertTrue(innerProperty instanceof ObjectProperty); + + ObjectProperty obj = (ObjectProperty) innerProperty; + Property name = obj.getProperties().get("name"); + assertTrue(name instanceof StringProperty); + } + + @Test + public void testArrayResponse() { + Swagger swagger = new Swagger(); + + ArrayProperty schema = new ArrayProperty(); + schema.setItems(new ObjectProperty() + .property("name", new StringProperty())); + + swagger.path("/foo/baz", new Path() + .get(new Operation() + .response(200, new Response() + .vendorExtension("x-foo", "bar") + .description("it works!") + .schema(schema)))); + new InlineModelResolver().flatten(swagger); + + Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200"); + assertTrue(response.getSchema() instanceof ArrayProperty); + + ArrayProperty am = (ArrayProperty) response.getSchema(); + Property items = am.getItems(); + assertTrue(items instanceof ObjectProperty); + ObjectProperty op = (ObjectProperty) items; + Property name = op.getProperties().get("name"); + assertTrue(name instanceof StringProperty); } } From 905a7746e7243491d2fd7d31a5ca353950622abb Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 21:45:47 -0700 Subject: [PATCH 22/78] updated test --- .../swagger/codegen/InlineModelResolverTest.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index 474cfad86e64..d1c9fc63d9e0 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -171,20 +171,16 @@ public class InlineModelResolverTest { assertNotNull(response.getSchema()); Property responseProperty = response.getSchema(); - assertTrue(responseProperty instanceof RefProperty); - Model inline = swagger.getDefinitions().get("inline_response_200"); - assertNotNull(inline); - assertTrue(inline instanceof ArrayModel); + // no need to flatten more + assertTrue(responseProperty instanceof ArrayProperty); - ArrayModel am = (ArrayModel) inline; - assertTrue(am.getItems() instanceof RefProperty); + ArrayProperty ap = (ArrayProperty) responseProperty; + Property p = ap.getItems(); - Model inlineInner = swagger.getDefinitions().get("inline_response_200_inner"); - assertNotNull(inlineInner); - assertTrue(inlineInner instanceof ModelImpl); + assertNotNull(p); - ModelImpl innerModel = (ModelImpl) inlineInner; + ObjectProperty innerModel = (ObjectProperty) p; assertTrue(innerModel.getProperties().size() == 1); assertNotNull(innerModel.getProperties().get("name")); } From 555fd54fbb3773863cd1f598398faca574a43ac8 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 22:09:33 -0700 Subject: [PATCH 23/78] updated swagger-core versions --- .../src/main/resources/Groovy/build.gradle.mustache | 3 --- modules/swagger-codegen/src/main/resources/Java/pom.mustache | 2 +- .../src/main/resources/JavaInflector/pom.mustache | 2 +- .../swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache | 2 +- .../swagger-codegen/src/main/resources/akka-scala/pom.mustache | 2 +- .../src/main/resources/android-java/pom.mustache | 2 +- .../swagger-codegen/src/main/resources/codegen/pom.mustache | 2 +- modules/swagger-codegen/src/main/resources/scala/pom.mustache | 2 +- 8 files changed, 7 insertions(+), 10 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache index d98f375c61d6..342094c90ec9 100644 --- a/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache @@ -24,9 +24,6 @@ repositories { dependencies { groovy "org.codehaus.groovy:groovy-all:2.0.5" compile 'org.codehaus.groovy.modules.http-builder:http-builder:0.6' - - } task wrapper(type: Wrapper) { gradleVersion = '1.6' } - diff --git a/modules/swagger-codegen/src/main/resources/Java/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/pom.mustache index 315ea9e5b924..c7dd1865518c 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pom.mustache @@ -161,7 +161,7 @@ - 1.5.0 + 1.5.4 1.18 2.4.2 2.3 diff --git a/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache index 20d5aaf30c64..0f489f4923dd 100644 --- a/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache @@ -83,7 +83,7 @@ 1.0.0 - 1.5.3 + 1.5.4 9.2.9.v20150224 1.0.1 4.8.2 diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache index ba58d23ca7f0..b8426a0a6931 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache @@ -168,7 +168,7 @@ - 1.5.3 + 1.5.4 9.2.9.v20150224 1.18.1 1.6.3 diff --git a/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache b/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache index b9fd8603baaa..b5c9997ce0f7 100644 --- a/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache @@ -217,7 +217,7 @@ 2.3.9 1.2 2.2 - 1.5.3 + 1.5.4 1.0.0 4.8.1 diff --git a/modules/swagger-codegen/src/main/resources/android-java/pom.mustache b/modules/swagger-codegen/src/main/resources/android-java/pom.mustache index 05388db4e117..ad093828ecc2 100644 --- a/modules/swagger-codegen/src/main/resources/android-java/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/android-java/pom.mustache @@ -145,7 +145,7 @@ - 1.5.0 + 1.5.4 2.3.1 4.8.1 1.0.0 diff --git a/modules/swagger-codegen/src/main/resources/codegen/pom.mustache b/modules/swagger-codegen/src/main/resources/codegen/pom.mustache index ad480b9b331b..29a980a50914 100644 --- a/modules/swagger-codegen/src/main/resources/codegen/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/codegen/pom.mustache @@ -95,7 +95,7 @@ - 2.1.2-M1 + 2.1.3 1.0.0 4.8.1 diff --git a/modules/swagger-codegen/src/main/resources/scala/pom.mustache b/modules/swagger-codegen/src/main/resources/scala/pom.mustache index 5fc849ea87df..7a2e36c935ab 100644 --- a/modules/swagger-codegen/src/main/resources/scala/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/scala/pom.mustache @@ -210,7 +210,7 @@ 1.2 2.2 1.19 - 1.5.3 + 1.5.4 1.0.5 1.0.0 2.4.2 From aaf1df19717aea46e2c0eedf54e7cfeacd09afd0 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 23:10:48 -0700 Subject: [PATCH 24/78] more flattening fixes --- .../swagger/codegen/InlineModelResolver.java | 22 +++++---- .../codegen/InlineModelResolverTest.java | 45 ++++++++++++++++--- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index e137b8843c62..1a811ab4372a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -1,5 +1,6 @@ package io.swagger.codegen; +import com.sun.org.apache.xpath.internal.operations.Mod; import io.swagger.models.*; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; @@ -43,14 +44,18 @@ public class InlineModelResolver { BodyParameter bp = (BodyParameter) parameter; if (bp.getSchema() != null) { Model model = bp.getSchema(); - String existing = matchGenerated(model); - if (existing != null) { - bp.setSchema(new RefModel(existing)); - } else { - String name = uniqueName(bp.getName()); - bp.setSchema(new RefModel(name)); - addGenerated(name, model); - swagger.addDefinition(name, model); + if(model instanceof ModelImpl) { + ModelImpl obj = (ModelImpl) model; + flattenProperties(obj.getProperties(), pathname); + } + else if (model instanceof ArrayModel) { + ArrayModel am = (ArrayModel) model; + Property inner = am.getItems(); + + if(inner instanceof ObjectProperty) { + ObjectProperty op = (ObjectProperty) inner; + flattenProperties(op.getProperties(), pathname); + } } } } @@ -170,6 +175,7 @@ public class InlineModelResolver { public String uniqueName(String key) { int count = 0; boolean done = false; + key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", ""); while (!done) { String name = key; if (count > 0) { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index d1c9fc63d9e0..d3d8a60f8667 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -110,19 +110,21 @@ public class InlineModelResolverTest { .parameter(new BodyParameter() .name("body") .schema(new ModelImpl() + .property("address", new ObjectProperty() + .property("street", new StringProperty())) .property("name", new StringProperty()))))); new InlineModelResolver().flatten(swagger); Operation operation = swagger.getPaths().get("/hello").getGet(); BodyParameter bp = (BodyParameter)operation.getParameters().get(0); - assertTrue(bp.getSchema() instanceof RefModel); + assertTrue(bp.getSchema() instanceof ModelImpl); - Model body = swagger.getDefinitions().get("body"); + Model body = swagger.getDefinitions().get("hello_address"); assertTrue(body instanceof ModelImpl); ModelImpl impl = (ModelImpl) body; - assertNotNull(impl.getProperties().get("name")); + assertNotNull(impl.getProperties().get("street")); } @Test @@ -134,7 +136,9 @@ public class InlineModelResolverTest { .parameter(new BodyParameter() .name("body") .schema(new ArrayModel() - .items(new StringProperty()))))); + .items(new ObjectProperty() + .property("address", new ObjectProperty() + .property("street", new StringProperty()))))))); new InlineModelResolver().flatten(swagger); @@ -144,10 +148,17 @@ public class InlineModelResolverTest { BodyParameter bp = (BodyParameter) param; Model schema = bp.getSchema(); - assertTrue(schema instanceof RefModel); + assertTrue(schema instanceof ArrayModel); - Model model = swagger.getDefinitions().get("body"); - assertTrue(model instanceof ArrayModel); + ArrayModel am = (ArrayModel) schema; + Property inner = am.getItems(); + + ObjectProperty op = (ObjectProperty) inner; + Property name = op.getProperties().get("address"); + assertTrue(name instanceof RefProperty); + + Model model = swagger.getDefinitions().get("hello_address"); + assertNotNull(model); } @Test @@ -267,4 +278,24 @@ public class InlineModelResolverTest { Property name = op.getProperties().get("name"); assertTrue(name instanceof StringProperty); } + + @Test + public void testBasicInput() { + Swagger swagger = new Swagger(); + + ModelImpl user = new ModelImpl() + .property("name", new StringProperty()); + + swagger.path("/foo/baz", new Path() + .post(new Operation() + .parameter(new BodyParameter() + .name("myBody") + .schema(new RefModel("User"))))); + + swagger.addDefinition("User", user); + + new InlineModelResolver().flatten(swagger); + + Json.prettyPrint(swagger); + } } From e1ee7065d5e454a58d429745ba6ecede0d389512 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 23:12:02 -0700 Subject: [PATCH 25/78] rebuilt client --- samples/client/petstore/java/default/pom.xml | 2 +- .../default/src/main/java/io/swagger/client/ApiClient.java | 2 +- .../src/main/java/io/swagger/client/ApiException.java | 2 +- .../src/main/java/io/swagger/client/Configuration.java | 2 +- .../java/default/src/main/java/io/swagger/client/JSON.java | 2 +- .../java/default/src/main/java/io/swagger/client/Pair.java | 2 +- .../default/src/main/java/io/swagger/client/StringUtil.java | 2 +- .../default/src/main/java/io/swagger/client/TypeRef.java | 2 +- .../default/src/main/java/io/swagger/client/api/PetApi.java | 2 +- .../src/main/java/io/swagger/client/api/StoreApi.java | 2 +- .../default/src/main/java/io/swagger/client/api/UserApi.java | 2 +- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../src/main/java/io/swagger/client/auth/Authentication.java | 2 +- .../src/main/java/io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../default/src/main/java/io/swagger/client/auth/OAuth.java | 2 +- .../src/main/java/io/swagger/client/auth/OAuthFlow.java | 5 +++++ .../src/main/java/io/swagger/client/model/Category.java | 2 +- .../default/src/main/java/io/swagger/client/model/Order.java | 2 +- .../default/src/main/java/io/swagger/client/model/Pet.java | 2 +- .../default/src/main/java/io/swagger/client/model/Tag.java | 2 +- .../default/src/main/java/io/swagger/client/model/User.java | 2 +- 21 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuthFlow.java diff --git a/samples/client/petstore/java/default/pom.xml b/samples/client/petstore/java/default/pom.xml index 3cef1c564c91..da49f3b2fb09 100644 --- a/samples/client/petstore/java/default/pom.xml +++ b/samples/client/petstore/java/default/pom.xml @@ -161,7 +161,7 @@ - 1.5.0 + 1.5.4 1.18 2.4.2 2.3 diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java index c4b1153dcd28..2171e0ac9b49 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java @@ -39,7 +39,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class ApiClient { private Map hostMap = new HashMap(); private Map defaultHeaderMap = new HashMap(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java index 649e4132cb04..760a34fd4086 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java index e7837fa47a5c..252388817f62 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java index 19c2420656ad..55a1a578403d 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.datatype.joda.*; import java.io.IOException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class JSON { private ObjectMapper mapper; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java index 78c15c6c2a01..c82e86bd5e43 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java index 2348914456a9..49132678fa5f 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java index a0ebe355071e..f5428ed2fede 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class TypeRef { private final Type type; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index ca9111f41764..d24150000137 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class PetApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java index f0628c595c98..5dc6e62b0e59 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java index 3412c565b376..518c79be52cb 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 69d80c755b84..3296813e1b2c 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java index 0c254861af47..0e2eb685eee9 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 19dfa96e9f20..9ad9b46fd362 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -8,7 +8,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java index ef89432a3598..f9f27afa39e9 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class OAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuthFlow.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuthFlow.java new file mode 100644 index 000000000000..597ec99b48b7 --- /dev/null +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuthFlow.java @@ -0,0 +1,5 @@ +package io.swagger.client.auth; + +public enum OAuthFlow { + accessCode, implicit, password, application +} \ No newline at end of file diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index ea615a58e98b..9ef8073a69a2 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class Category { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index b51be0c52e03..e76f62cee8f7 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class Order { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index aca4848ff988..217907a4d575 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class Pet { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index 98ff0c44e177..7d0e8ff0b27f 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class Tag { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index f4a80143b91f..9a588dd1b30a 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-30T16:27:52.437+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") public class User { private Long id = null; From 5e69d929a065aa9bd96347779545ba068245a678 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 23:13:27 -0700 Subject: [PATCH 26/78] rebuilt --- .../src/main/java/io/swagger/api/ApiException.java | 2 +- .../main/java/io/swagger/api/ApiOriginFilter.java | 2 +- .../java/io/swagger/api/ApiResponseMessage.java | 2 +- .../java/io/swagger/api/NotFoundException.java | 2 +- .../src/main/java/io/swagger/api/PetApi.java | 10 +++++----- .../src/main/java/io/swagger/api/StoreApi.java | 10 +++++----- .../src/main/java/io/swagger/api/UserApi.java | 14 +++++++------- .../io/swagger/configuration/SwaggerConfig.java | 2 +- .../configuration/SwaggerUiConfiguration.java | 2 +- .../io/swagger/configuration/WebApplication.java | 2 +- .../swagger/configuration/WebMvcConfiguration.java | 2 +- .../src/main/java/io/swagger/model/Category.java | 2 +- .../src/main/java/io/swagger/model/Order.java | 2 +- .../src/main/java/io/swagger/model/Pet.java | 2 +- .../src/main/java/io/swagger/model/Tag.java | 2 +- .../src/main/java/io/swagger/model/User.java | 2 +- 16 files changed, 30 insertions(+), 30 deletions(-) diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java index f761d3871daf..0f939874b102 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java index 432c49d5d5cd..e42d6d47e6ac 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class ApiOriginFilter implements javax.servlet.Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java index c606c9398f49..73af3ee8d758 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java index 9c93b025ef93..3892269e3951 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java index ae731880a173..9138908f9c81 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApi.java @@ -30,15 +30,15 @@ import static org.springframework.http.MediaType.*; @Controller @RequestMapping(value = "/pet", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class PetApi { @ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 405, message = "Validation exception"), + @ApiResponse(code = 400, message = "Invalid ID supplied"), @ApiResponse(code = 404, message = "Pet not found"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 405, message = "Validation exception") }) @RequestMapping(value = "", produces = { "application/json", "application/xml" }, consumes = { "application/json", "application/xml" }, @@ -112,9 +112,9 @@ public class PetApi { @ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "Pet not found"), @ApiResponse(code = 200, message = "successful operation"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 400, message = "Invalid ID supplied"), + @ApiResponse(code = 404, message = "Pet not found") }) @RequestMapping(value = "/{petId}", produces = { "application/json", "application/xml" }, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java index 577052883c0e..c2e9f0459af2 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApi.java @@ -30,7 +30,7 @@ import static org.springframework.http.MediaType.*; @Controller @RequestMapping(value = "/store", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class StoreApi { @@ -70,9 +70,9 @@ public class StoreApi { @ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "Order not found"), @ApiResponse(code = 200, message = "successful operation"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 400, message = "Invalid ID supplied"), + @ApiResponse(code = 404, message = "Order not found") }) @RequestMapping(value = "/order/{orderId}", produces = { "application/json", "application/xml" }, @@ -90,8 +90,8 @@ public class StoreApi { @ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "Order not found"), - @ApiResponse(code = 400, message = "Invalid ID supplied") }) + @ApiResponse(code = 400, message = "Invalid ID supplied"), + @ApiResponse(code = 404, message = "Order not found") }) @RequestMapping(value = "/order/{orderId}", produces = { "application/json", "application/xml" }, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java index 6a68c27ae39f..3d211df8cc88 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApi.java @@ -30,7 +30,7 @@ import static org.springframework.http.MediaType.*; @Controller @RequestMapping(value = "/user", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class UserApi { @@ -128,9 +128,9 @@ public class UserApi { @ApiOperation(value = "Get user by user name", notes = "", response = User.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "User not found"), @ApiResponse(code = 200, message = "successful operation"), - @ApiResponse(code = 400, message = "Invalid username supplied") }) + @ApiResponse(code = 400, message = "Invalid username supplied"), + @ApiResponse(code = 404, message = "User not found") }) @RequestMapping(value = "/{username}", produces = { "application/json", "application/xml" }, @@ -148,8 +148,8 @@ public class UserApi { @ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "User not found"), - @ApiResponse(code = 400, message = "Invalid user supplied") }) + @ApiResponse(code = 400, message = "Invalid user supplied"), + @ApiResponse(code = 404, message = "User not found") }) @RequestMapping(value = "/{username}", produces = { "application/json", "application/xml" }, @@ -171,8 +171,8 @@ public class UserApi { @ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) @ApiResponses(value = { - @ApiResponse(code = 404, message = "User not found"), - @ApiResponse(code = 400, message = "Invalid username supplied") }) + @ApiResponse(code = 400, message = "Invalid username supplied"), + @ApiResponse(code = 404, message = "User not found") }) @RequestMapping(value = "/{username}", produces = { "application/json", "application/xml" }, diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java index 58564e526261..b7337098dd94 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerConfig.java @@ -18,7 +18,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 //Loads the spring beans required by the framework @PropertySource("classpath:swagger.properties") @Import(SwaggerUiConfiguration.class) -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class SwaggerConfig { @Bean ApiInfo apiInfo() { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java index ead813573312..3228973afef9 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java @@ -8,7 +8,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration @EnableWebMvc -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class SwaggerUiConfiguration extends WebMvcConfigurerAdapter { private static final String[] SERVLET_RESOURCE_LOCATIONS = { "/" }; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java index 3c42b3f838ae..2c453bc6d3d2 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebApplication.java @@ -2,7 +2,7 @@ package io.swagger.configuration; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class WebApplication extends AbstractAnnotationConfigDispatcherServletInitializer { @Override diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java index 4c973c218889..4ea5e823ddef 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/WebMvcConfiguration.java @@ -3,7 +3,7 @@ package io.swagger.configuration; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class WebMvcConfiguration extends WebMvcConfigurationSupport { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java index d023688b5e50..f5c666097a5f 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java index 87b8633767a5..fab4a0e4d0c8 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java index 5f4de45616e0..756eb70fb03d 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java index 6b2b0e6c1163..46bb7e3d0b19 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java index 97044d2a1e7b..8ea171f8497f 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-09-30T16:27:59.075+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2015-10-19T23:12:31.377-07:00") public class User { private Long id = null; From 539496d73572a50be8d51e07697fde3b582a237d Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 07:10:05 -0700 Subject: [PATCH 27/78] rebuilt --- .../src/main/resources/scalatra/api.mustache | 53 +-- .../resources/scalatra/bodyParam.mustache | 1 + .../scalatra/bodyParamOperation.mustache | 3 + .../resources/scalatra/formParam.mustache | 1 + .../scalatra/formParamMustache.mustache | 3 + .../resources/scalatra/headerParam.mustache | 1 + .../scalatra/headerParamOperation.mustache | 3 + .../resources/scalatra/pathParam.mustache | 1 + .../resources/scalatra/queryParam.mustache | 1 + .../scalatra/queryParamOperation.mustache | 13 + samples/server/petstore/scalatra/README.md | 6 +- samples/server/petstore/scalatra/build.sbt | 52 ++- samples/server/petstore/scalatra/sbt | 0 .../scalatra/src/main/scala/JettyMain.scala | 20 +- .../src/main/scala/ScalatraBootstrap.scala | 16 +- .../scalatra/src/main/scala/ServletApp.scala | 32 +- .../scala/com/wordnik/client/api/PetApi.scala | 397 ++++++++---------- .../com/wordnik/client/api/StoreApi.scala | 135 +++--- .../com/wordnik/client/api/UserApi.scala | 311 ++++++-------- .../com/wordnik/client/model/Category.scala | 9 +- .../com/wordnik/client/model/Order.scala | 16 +- .../scala/com/wordnik/client/model/Pet.scala | 19 +- .../scala/com/wordnik/client/model/Tag.scala | 9 +- .../scala/com/wordnik/client/model/User.scala | 21 +- .../scalatra/src/main/webapp/WEB-INF/web.xml | 28 +- 25 files changed, 531 insertions(+), 620 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/bodyParam.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/bodyParamOperation.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/formParam.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/formParamMustache.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/headerParam.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/headerParamOperation.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/pathParam.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/queryParam.mustache create mode 100644 modules/swagger-codegen/src/main/resources/scalatra/queryParamOperation.mustache mode change 100644 => 100755 samples/server/petstore/scalatra/sbt diff --git a/modules/swagger-codegen/src/main/resources/scalatra/api.mustache b/modules/swagger-codegen/src/main/resources/scalatra/api.mustache index 54710361fe9a..b6749641e545 100644 --- a/modules/swagger-codegen/src/main/resources/scalatra/api.mustache +++ b/modules/swagger-codegen/src/main/resources/scalatra/api.mustache @@ -33,57 +33,16 @@ class {{classname}} (implicit val swagger: Swagger) extends ScalatraServlet val {{nickname}}Operation = (apiOperation[{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}]("{{nickname}}") summary "{{{summary}}}" - parameters( - {{#allParams}}{{#isQueryParam}}queryParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}} - {{/isQueryParam}} - {{#isPathParam}}pathParam[{{dataType}}]("{{paramName}}").description(""){{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}} - {{/isPathParam}} - {{#isHeaderParam}}headerParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}} - {{/isHeaderParam}} - {{#isBodyParam}}bodyParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}} - {{/isBodyParam}} - {{#isFormParam}}formParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}} - {{/isFormParam}} - {{#hasMore}},{{/hasMore}} - {{/allParams}}) + parameters({{#allParams}}{{>queryParam}}{{>pathParam}}{{>bodyParam}}{{>formParam}}{{#hasMore}}, + {{/hasMore}}{{/allParams}}) ) {{httpMethod}}("{{path}}",operation({{nickname}}Operation)) { {{#allParams}} - {{#isFile}} - val {{paramName}} = fileParams("{{paramName}}") - {{/isFile}} - {{^isFile}} - {{#isPathParam}} - val {{paramName}} = params.getOrElse("{{paramName}}", halt(400)) - {{/isPathParam}} - - {{#isQueryParam}} - {{#collectionFormat}}val {{paramName}}String = params.getAs[String]("{{paramName}}") - val {{paramName}} = if("{{collectionFormat}}".equals("default")) { - {{paramName}}String match { - case Some(str) => str.split(",") - case None => List() - } - } - else - List() - {{/collectionFormat}} - {{^collectionFormat}}val {{paramName}} = params.getAs[{{dataType}}]("{{paramName}}"){{/collectionFormat}} - - {{/isQueryParam}} - - {{#isHeaderParam}} - val {{paramName}} = request.getHeader("{{paramName}}") - {{/isHeaderParam}} - - {{#isFormParam}} - val {{paramName}} = params.getAs[{{dataType}}]("{{paramName}}") - {{/isFormParam}} - - {{#isBodyParam}} - val {{paramName}} = parsedBody.extract[{{dataType}}] - {{/isBodyParam}} + {{#isFile}}val {{paramName}} = fileParams("{{paramName}}"){{/isFile}} + {{^isFile}}{{#isPathParam}} + val {{paramName}} = params.getOrElse("{{paramName}}", halt(400)){{/isPathParam}} + {{>queryParamOperation}}{{>headerParamOperation}}{{>formParamMustache}}{{>bodyParam}} {{/isFile}} println("{{paramName}}: " + {{paramName}}) {{/allParams}} diff --git a/modules/swagger-codegen/src/main/resources/scalatra/bodyParam.mustache b/modules/swagger-codegen/src/main/resources/scalatra/bodyParam.mustache new file mode 100644 index 000000000000..07a90aa23cbc --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/bodyParam.mustache @@ -0,0 +1 @@ +{{#isBodyParam}}bodyParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}}{{/isBodyParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/scalatra/bodyParamOperation.mustache b/modules/swagger-codegen/src/main/resources/scalatra/bodyParamOperation.mustache new file mode 100644 index 000000000000..cfb2bf49d235 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/bodyParamOperation.mustache @@ -0,0 +1,3 @@ + {{#isBodyParam}} + val {{paramName}} = parsedBody.extract[{{dataType}}] + {{/isBodyParam}} diff --git a/modules/swagger-codegen/src/main/resources/scalatra/formParam.mustache b/modules/swagger-codegen/src/main/resources/scalatra/formParam.mustache new file mode 100644 index 000000000000..1afcf12ccc6a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/formParam.mustache @@ -0,0 +1 @@ +{{#isFormParam}}formParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}}{{/isFormParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/scalatra/formParamMustache.mustache b/modules/swagger-codegen/src/main/resources/scalatra/formParamMustache.mustache new file mode 100644 index 000000000000..29c571ee2efd --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/formParamMustache.mustache @@ -0,0 +1,3 @@ + {{#isFormParam}} + val {{paramName}} = params.getAs[{{dataType}}]("{{paramName}}") + {{/isFormParam}} diff --git a/modules/swagger-codegen/src/main/resources/scalatra/headerParam.mustache b/modules/swagger-codegen/src/main/resources/scalatra/headerParam.mustache new file mode 100644 index 000000000000..798bb0fe6d5d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/headerParam.mustache @@ -0,0 +1 @@ +{{#isHeaderParam}}headerParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}}{{/isHeaderParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/scalatra/headerParamOperation.mustache b/modules/swagger-codegen/src/main/resources/scalatra/headerParamOperation.mustache new file mode 100644 index 000000000000..7f8f5286392d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/headerParamOperation.mustache @@ -0,0 +1,3 @@ + {{#isHeaderParam}} + val {{paramName}} = request.getHeader("{{paramName}}") + {{/isHeaderParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/scalatra/pathParam.mustache b/modules/swagger-codegen/src/main/resources/scalatra/pathParam.mustache new file mode 100644 index 000000000000..ae72aa8ec74f --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/pathParam.mustache @@ -0,0 +1 @@ +{{#isPathParam}}pathParam[{{dataType}}]("{{paramName}}").description(""){{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/scalatra/queryParam.mustache b/modules/swagger-codegen/src/main/resources/scalatra/queryParam.mustache new file mode 100644 index 000000000000..79af702d0f04 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/queryParam.mustache @@ -0,0 +1 @@ +{{#isQueryParam}}queryParam[{{dataType}}]("{{paramName}}").description(""){{^required}}.optional{{/required}}{{#defaultValue}}.defaultValue({{{defaultValue}}}){{/defaultValue}}{{/isQueryParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/scalatra/queryParamOperation.mustache b/modules/swagger-codegen/src/main/resources/scalatra/queryParamOperation.mustache new file mode 100644 index 000000000000..832bbed20300 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/scalatra/queryParamOperation.mustache @@ -0,0 +1,13 @@ + {{#isQueryParam}} + {{#collectionFormat}}val {{paramName}}String = params.getAs[String]("{{paramName}}") + val {{paramName}} = if("{{collectionFormat}}".equals("default")) { + {{paramName}}String match { + case Some(str) => str.split(",") + case None => List() + } + } + else + List() + {{/collectionFormat}} + {{^collectionFormat}}val {{paramName}} = params.getAs[{{dataType}}]("{{paramName}}"){{/collectionFormat}} + {{/isQueryParam}} \ No newline at end of file diff --git a/samples/server/petstore/scalatra/README.md b/samples/server/petstore/scalatra/README.md index f8a560b776f5..3ffa01fb2571 100644 --- a/samples/server/petstore/scalatra/README.md +++ b/samples/server/petstore/scalatra/README.md @@ -1,10 +1,10 @@ # Swagger generated server ## Overview -This server was generated by the [swagger-codegen](https://github.com/wordnik/swagger-codegen) project. By using the -[swagger-spec](https://github.com/wordnik/swagger-core/wiki) from a remote server, you can easily generate a server stub. This +This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the +[swagger-spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub. This is an example of building a swagger-enabled scalatra server. This example uses the [scalatra](http://scalatra.org/) framework. To see how to make this your own, look here: -[README](https://github.com/wordnik/swagger-codegen/tree/master/samples/server-generator/scalatra) \ No newline at end of file +[README](https://github.com/swagger-api/swagger-codegen/tree/master/samples/server-generator/scalatra) \ No newline at end of file diff --git a/samples/server/petstore/scalatra/build.sbt b/samples/server/petstore/scalatra/build.sbt index eaa098f07fab..00575312d853 100644 --- a/samples/server/petstore/scalatra/build.sbt +++ b/samples/server/petstore/scalatra/build.sbt @@ -1,6 +1,4 @@ - - -// put this at the top of the file +import AssemblyKeys._ // put this at the top of the file import NativePackagerKeys._ @@ -10,9 +8,9 @@ assemblySettings scalariformSettings -organization := "com.wordnik" +organization := "io.swagger" -seq(webSettings: _*) +seq(webSettings :_*) mainClass in assembly := Some("JettyMain") @@ -25,40 +23,40 @@ scalaVersion := "2.11.2" scalacOptions += "-language:postfixOps" libraryDependencies ++= Seq( - "org.scalatest" %% "scalatest" % "2.2.1" % "test", - "org.scalatra" %% "scalatra" % "2.3.0.RC3", - "org.scalatra" %% "scalatra-scalate" % "2.3.0.RC3", - "org.scalatra" %% "scalatra-json" % "2.3.0.RC3", - "org.scalatra" %% "scalatra-swagger" % "2.3.0.RC3", - "org.scalatra" %% "scalatra-swagger-ext" % "2.3.0.RC3", - "org.scalatra" %% "scalatra-slf4j" % "2.3.0.RC3", - "org.json4s" %% "json4s-jackson" % "3.2.10", - "org.json4s" %% "json4s-ext" % "3.2.10", - "commons-codec" % "commons-codec" % "1.7", - "net.databinder.dispatch" %% "dispatch-core" % "0.11.2", + "org.scalatest" %% "scalatest" % "2.2.1" % "test", + "org.scalatra" %% "scalatra" % "2.3.0.RC3", + "org.scalatra" %% "scalatra-scalate" % "2.3.0.RC3", + "org.scalatra" %% "scalatra-json" % "2.3.0.RC3", + "org.scalatra" %% "scalatra-swagger" % "2.3.0.RC3", + "org.scalatra" %% "scalatra-swagger-ext" % "2.3.0.RC3", + "org.scalatra" %% "scalatra-slf4j" % "2.3.0.RC3", + "org.json4s" %% "json4s-jackson" % "3.2.10", + "org.json4s" %% "json4s-ext" % "3.2.10", + "commons-codec" % "commons-codec" % "1.7", + "net.databinder.dispatch" %% "dispatch-core" % "0.11.2", //"net.databinder.dispatch" %% "json4s-jackson" % "0.11.2", - "net.databinder.dispatch" %% "dispatch-json4s-jackson" % "0.11.2", - "com.typesafe.akka" %% "akka-actor" % "2.3.6", - "org.eclipse.jetty" % "jetty-server" % "9.2.3.v20140905" % "container;compile;test", - "org.eclipse.jetty" % "jetty-webapp" % "9.2.3.v20140905" % "container;compile;test", - "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;compile;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")) + "net.databinder.dispatch" %% "dispatch-json4s-jackson" % "0.11.2", + "com.typesafe.akka" %% "akka-actor" % "2.3.6", + "org.eclipse.jetty" % "jetty-server" % "9.2.3.v20140905" % "container;compile;test", + "org.eclipse.jetty" % "jetty-webapp" % "9.2.3.v20140905" % "container;compile;test", + "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;compile;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")) ) -resolvers += "Local Maven Repository" at "file://" + Path.userHome.absolutePath + "/.m2/repository" +resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository" resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/" ivyXML := - - - - + + + + mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => { - case "about.html" => MergeStrategy.discard + case "about.html" => MergeStrategy.discard case x => old(x) } } diff --git a/samples/server/petstore/scalatra/sbt b/samples/server/petstore/scalatra/sbt old mode 100644 new mode 100755 diff --git a/samples/server/petstore/scalatra/src/main/scala/JettyMain.scala b/samples/server/petstore/scalatra/src/main/scala/JettyMain.scala index 69ca43c0e1f8..e25f16ba3929 100644 --- a/samples/server/petstore/scalatra/src/main/scala/JettyMain.scala +++ b/samples/server/petstore/scalatra/src/main/scala/JettyMain.scala @@ -1,7 +1,17 @@ - +import org.eclipse.jetty.server._ +import org.eclipse.jetty.webapp.WebAppContext +import org.scalatra.servlet.ScalatraListener object JettyMain { + object conf { + val port = sys.env.get("PORT") map (_.toInt) getOrElse (8080) + val stopTimeout = sys.env.get("STOP_TIMEOUT") map (_.toInt) getOrElse (5000) + val connectorIdleTimeout = sys.env.get("CONNECTOR_IDLE_TIMEOUT") map (_.toInt) getOrElse (90000) + val webapp = sys.env.get("PUBLIC") getOrElse "webapp" + val contextPath = sys.env.get("CONTEXT_PATH") getOrElse "/" + } + def main(args: Array[String]) = { val server: Server = new Server println("starting jetty") @@ -30,12 +40,4 @@ object JettyMain { server.start() } - - object conf { - val port = sys.env.get("PORT") map (_.toInt) getOrElse (8080) - val stopTimeout = sys.env.get("STOP_TIMEOUT") map (_.toInt) getOrElse (5000) - val connectorIdleTimeout = sys.env.get("CONNECTOR_IDLE_TIMEOUT") map (_.toInt) getOrElse (90000) - val webapp = sys.env.get("PUBLIC") getOrElse "webapp" - val contextPath = sys.env.get("CONTEXT_PATH") getOrElse "/" - } } diff --git a/samples/server/petstore/scalatra/src/main/scala/ScalatraBootstrap.scala b/samples/server/petstore/scalatra/src/main/scala/ScalatraBootstrap.scala index a8a16d0b1f9c..1129a77d3c8a 100644 --- a/samples/server/petstore/scalatra/src/main/scala/ScalatraBootstrap.scala +++ b/samples/server/petstore/scalatra/src/main/scala/ScalatraBootstrap.scala @@ -1,4 +1,8 @@ - +import com.wordnik.client.api._ +import akka.actor.ActorSystem +import io.swagger.app.{ResourcesApp, SwaggerApp} +import javax.servlet.ServletContext +import org.scalatra.LifeCycle class ScalatraBootstrap extends LifeCycle { implicit val swagger = new SwaggerApp @@ -6,11 +10,11 @@ class ScalatraBootstrap extends LifeCycle { override def init(context: ServletContext) { implicit val system = ActorSystem("appActorSystem") try { - context mount(new UserApi, "/User/*") - context mount(new PetApi, "/Pet/*") - context mount(new StoreApi, "/Store/*") - - context mount(new ResourcesApp, "/api-docs/*") + context mount (new UserApi, "/User/*") + context mount (new PetApi, "/Pet/*") + context mount (new StoreApi, "/Store/*") + + context mount (new ResourcesApp, "/api-docs/*") } catch { case e: Throwable => e.printStackTrace() } diff --git a/samples/server/petstore/scalatra/src/main/scala/ServletApp.scala b/samples/server/petstore/scalatra/src/main/scala/ServletApp.scala index 212fbbb94b7c..6631eb98cc1e 100644 --- a/samples/server/petstore/scalatra/src/main/scala/ServletApp.scala +++ b/samples/server/petstore/scalatra/src/main/scala/ServletApp.scala @@ -1,4 +1,11 @@ -package com.wordnik.swagger.app +package io.swagger.app + +import _root_.akka.actor.ActorSystem + +import org.scalatra.swagger.{ ApiInfo, SwaggerWithAuth, Swagger } +import org.scalatra.swagger.{JacksonSwaggerBase, Swagger} +import org.scalatra.ScalatraServlet +import org.json4s.{DefaultFormats, Formats} class ResourcesApp(implicit protected val system: ActorSystem, val swagger: SwaggerApp) extends ScalatraServlet with JacksonSwaggerBase { @@ -6,17 +13,16 @@ class ResourcesApp(implicit protected val system: ActorSystem, val swagger: Swag response.headers += ("Access-Control-Allow-Origin" -> "*") } - protected def buildFullUrl(path: String) = if (path.startsWith("http")) path - else { - val port = request.getServerPort - val h = request.getServerName - val prot = if (port == 443) "https" else "http" - val (proto, host) = if (port != 80 && port != 443) ("http", h + ":" + port.toString) else (prot, h) - "%s://%s%s%s".format( - proto, - host, - request.getContextPath, - path) + protected def buildFullUrl(path: String) = if (path.startsWith("http")) path else { + val port = request.getServerPort + val h = request.getServerName + val prot = if (port == 443) "https" else "http" + val (proto, host) = if (port != 80 && port != 443) ("http", h+":"+port.toString) else (prot, h) + "%s://%s%s%s".format( + proto, + host, + request.getContextPath, + path) } } @@ -25,7 +31,7 @@ class SwaggerApp extends Swagger(apiInfo = ApiSwagger.apiInfo, apiVersion = "1.0 object ApiSwagger { val apiInfo = ApiInfo( """Swagger Petstore""", - """This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://webchat.freenode.net/?channels=swagger). For this sample, you can use the api key `special-key` to test the authorization filters""", + """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""", """""", """apiteam@swagger.io""", """Apache 2.0""", diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/PetApi.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/PetApi.scala index b9c9b5bb2331..7e0a438db1e4 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/PetApi.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/PetApi.scala @@ -1,7 +1,23 @@ -package com.wordnik.client.apiass PetApi(implicit val swagger: Swagger) extends ScalatraServlet -with FileUploadSupport -with JacksonJsonSupport -with SwaggerSupport { +package com.wordnik.client.api + +import com.wordnik.client.model.Pet +import java.io.File + +import java.io.File + +import org.scalatra.{ TypedParamSupport, ScalatraServlet } +import org.scalatra.swagger._ +import org.json4s._ +import org.json4s.JsonDSL._ +import org.scalatra.json.{ JValueResult, JacksonJsonSupport } +import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException} + +import scala.collection.JavaConverters._ + +class PetApi (implicit val swagger: Swagger) extends ScalatraServlet + with FileUploadSupport + with JacksonJsonSupport + with SwaggerSupport { protected implicit val jsonFormats: Formats = DefaultFormats protected val applicationDescription: String = "PetApi" @@ -11,268 +27,221 @@ with SwaggerSupport { contentType = formats("json") response.headers += ("Access-Control-Allow-Origin" -> "*") } - + val updatePetOperation = (apiOperation[Unit]("updatePet") - summary "Update an existing pet" - parameters ( - - - bodyParam[Pet]("body").description("").optional - - - ) - ) - - put("/pet", operation(updatePetOperation)) { - - - val body = parsedBody.extract[Pet] - + summary "Update an existing pet" + parameters(bodyParam[Pet]("body").description("").optional) + ) + put("/pet",operation(updatePetOperation)) { + + + + +bodyParam[Pet]("body").description("").optional + println("body: " + body) - + } + val addPetOperation = (apiOperation[Unit]("addPet") - summary "Add a new pet to the store" - parameters ( - - - bodyParam[Pet]("body").description("").optional - - - ) - ) - - post("/pet", operation(addPetOperation)) { - - - val body = parsedBody.extract[Pet] - + summary "Add a new pet to the store" + parameters(bodyParam[Pet]("body").description("").optional) + ) + post("/pet",operation(addPetOperation)) { + + + + +bodyParam[Pet]("body").description("").optional + println("body: " + body) - + } + val findPetsByStatusOperation = (apiOperation[List[Pet]]("findPetsByStatus") - summary "Finds Pets by status" - parameters ( - queryParam[List[String]]("status").description("").optional + summary "Finds Pets by status" + parameters(queryParam[List[String]]("status").description("").optional.defaultValue(available)) + ) - - ) - ) - - get("/pet/findByStatus", operation(findPetsByStatusOperation)) { - - - val statusString = params.getAs[String]("status") - val status = if ("multi".equals("default")) { - statusString match { - case Some(str) => str.split(",") - case None => List() + get("/pet/findByStatus",operation(findPetsByStatusOperation)) { + + + + + val statusString = params.getAs[String]("status") + val status = if("multi".equals("default")) { + statusString match { + case Some(str) => str.split(",") + case None => List() + } } - } - else - List() - - - - - - - - - - + else + List() + + + + println("status: " + status) - + } + val findPetsByTagsOperation = (apiOperation[List[Pet]]("findPetsByTags") - summary "Finds Pets by tags" - parameters ( - queryParam[List[String]]("tags").description("").optional + summary "Finds Pets by tags" + parameters(queryParam[List[String]]("tags").description("").optional) + ) - - ) - ) - - get("/pet/findByTags", operation(findPetsByTagsOperation)) { - - - val tagsString = params.getAs[String]("tags") - val tags = if ("multi".equals("default")) { - tagsString match { - case Some(str) => str.split(",") - case None => List() + get("/pet/findByTags",operation(findPetsByTagsOperation)) { + + + + + val tagsString = params.getAs[String]("tags") + val tags = if("multi".equals("default")) { + tagsString match { + case Some(str) => str.split(",") + case None => List() + } } - } - else - List() - - - - - - - - - - + else + List() + + + + println("tags: " + tags) - + } + val getPetByIdOperation = (apiOperation[Pet]("getPetById") - summary "Find pet by ID" - parameters ( - - pathParam[Long]("petId").description("") - - - ) - ) - - get("/pet/{petId}", operation(getPetByIdOperation)) { - - - val petId = params.getOrElse("petId", halt(400)) - - - - - - - - + summary "Find pet by ID" + parameters(pathParam[Long]("petId").description("")) + ) + get("/pet/{petId}",operation(getPetByIdOperation)) { + + + + val petId = params.getOrElse("petId", halt(400)) + + println("petId: " + petId) - + } + val updatePetWithFormOperation = (apiOperation[Unit]("updatePetWithForm") - summary "Updates a pet in the store with form data" - parameters( - - pathParam[String]("petId").description("") - - - , - - - formParam[String]("name").description("").optional - - , - - - formParam[String]("status").description("").optional - - ) - ) - - post("/pet/{petId}", operation(updatePetWithFormOperation)) { - - - val petId = params.getOrElse("petId", halt(400)) - - - - - - - - + summary "Updates a pet in the store with form data" + parameters(pathParam[String]("petId").description(""), + formParam[String]("name").description("").optional, + formParam[String]("status").description("").optional) + ) + post("/pet/{petId}",operation(updatePetWithFormOperation)) { + + + + val petId = params.getOrElse("petId", halt(400)) + + println("petId: " + petId) + + + + + val name = params.getAs[String]("name") + - - - - - - - - - - val name = params.getAs[String]("name") - - - - + println("name: " + name) + + + + + val status = params.getAs[String]("status") + - - - - - - - - - - val status = params.getAs[String]("status") - - - - + println("status: " + status) - + } + val deletePetOperation = (apiOperation[Unit]("deletePet") - summary "Deletes a pet" - parameters( - - headerParam[String]("api_key").description("").optional - - - , - - pathParam[Long]("petId").description("") - - ) - ) - - delete("/pet/{petId}", operation(deletePetOperation)) { - - - val api_key = request.getHeader("api_key") - - - - - - - println("api_key: " + api_key) - - - - - val petId = params.getOrElse("petId", halt(400)) - - - - - - - - + summary "Deletes a pet" + parameters(pathParam[Long]("petId").description(""), + ) + ) + delete("/pet/{petId}",operation(deletePetOperation)) { + + + + val petId = params.getOrElse("petId", halt(400)) + + println("petId: " + petId) + + + + + val apiKey = request.getHeader("apiKey") + + + println("apiKey: " + apiKey) + + } + + + + val uploadFileOperation = (apiOperation[Unit]("uploadFile") + summary "uploads an image" + parameters(pathParam[Long]("petId").description(""), + formParam[String]("additionalMetadata").description("").optional, + formParam[File]("file").description("").optional) + ) + + post("/pet/{petId}/uploadImage",operation(uploadFileOperation)) { + + + + val petId = params.getOrElse("petId", halt(400)) + + + + println("petId: " + petId) + + + + + val additionalMetadata = params.getAs[String]("additionalMetadata") + + + + println("additionalMetadata: " + additionalMetadata) + + val file = fileParams("file") + + println("file: " + file) + } } \ No newline at end of file diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/StoreApi.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/StoreApi.scala index 3e31c93743ce..27fbc08e2c24 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/StoreApi.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/StoreApi.scala @@ -1,99 +1,96 @@ package com.wordnik.client.api -class StoreApi(implicit val swagger: Swagger) extends ScalatraServlet -with FileUploadSupport -with JacksonJsonSupport -with SwaggerSupport { +import com.wordnik.client.model.Order + +import java.io.File + +import org.scalatra.{ TypedParamSupport, ScalatraServlet } +import org.scalatra.swagger._ +import org.json4s._ +import org.json4s.JsonDSL._ +import org.scalatra.json.{ JValueResult, JacksonJsonSupport } +import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException} + +import scala.collection.JavaConverters._ + +class StoreApi (implicit val swagger: Swagger) extends ScalatraServlet + with FileUploadSupport + with JacksonJsonSupport + with SwaggerSupport { + protected implicit val jsonFormats: Formats = DefaultFormats + + protected val applicationDescription: String = "StoreApi" override protected val applicationName: Option[String] = Some("Store") - val getInventoryOperation = (apiOperation[Map[String, Int]]("getInventory") - summary "Returns pet inventories by status" - parameters( - ) - ) - val placeOrderOperation = (apiOperation[Order]("placeOrder") - summary "Place an order for a pet" - parameters ( - - - bodyParam[Order]("body").description("").optional - - - ) - ) before() { contentType = formats("json") response.headers += ("Access-Control-Allow-Origin" -> "*") } - val getOrderByIdOperation = (apiOperation[Order]("getOrderById") - summary "Find purchase order by ID" - parameters ( + - pathParam[String]("orderId").description("") - - - ) - ) - - get("/store/inventory", operation(getInventoryOperation)) { + val getInventoryOperation = (apiOperation[Map[String, Int]]("getInventory") + summary "Returns pet inventories by status" + parameters() + ) + get("/store/inventory",operation(getInventoryOperation)) { + } - val deleteOrderOperation = (apiOperation[Unit]("deleteOrder") - summary "Delete purchase order by ID" - parameters ( - pathParam[String]("orderId").description("") - - - ) - ) - - post("/store/order", operation(placeOrderOperation)) { - - - val body = parsedBody.extract[Order] + + val placeOrderOperation = (apiOperation[Order]("placeOrder") + summary "Place an order for a pet" + parameters(bodyParam[Order]("body").description("").optional) + ) + post("/store/order",operation(placeOrderOperation)) { + + + + +bodyParam[Order]("body").description("").optional + println("body: " + body) - + } - protected implicit val jsonFormats: Formats = DefaultFormats - - get("/store/order/{orderId}", operation(getOrderByIdOperation)) { - - - val orderId = params.getOrElse("orderId", halt(400)) - - - - - - + + val getOrderByIdOperation = (apiOperation[Order]("getOrderById") + summary "Find purchase order by ID" + parameters(pathParam[String]("orderId").description("")) + ) + get("/store/order/{orderId}",operation(getOrderByIdOperation)) { + + + + val orderId = params.getOrElse("orderId", halt(400)) + + println("orderId: " + orderId) - + } - protected val applicationDescription: String = "StoreApi" - - delete("/store/order/{orderId}", operation(deleteOrderOperation)) { - - - val orderId = params.getOrElse("orderId", halt(400)) - - - - - - + + val deleteOrderOperation = (apiOperation[Unit]("deleteOrder") + summary "Delete purchase order by ID" + parameters(pathParam[String]("orderId").description("")) + ) + delete("/store/order/{orderId}",operation(deleteOrderOperation)) { + + + + val orderId = params.getOrElse("orderId", halt(400)) + + println("orderId: " + orderId) - + } } \ No newline at end of file diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/UserApi.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/UserApi.scala index ab493b4bfac0..c63151a8d388 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/UserApi.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/api/UserApi.scala @@ -1,7 +1,22 @@ -package com.wordnik.client.apiass UserApi(implicit val swagger: Swagger) extends ScalatraServlet -with FileUploadSupport -with JacksonJsonSupport -with SwaggerSupport { +package com.wordnik.client.api + +import com.wordnik.client.model.User + +import java.io.File + +import org.scalatra.{ TypedParamSupport, ScalatraServlet } +import org.scalatra.swagger._ +import org.json4s._ +import org.json4s.JsonDSL._ +import org.scalatra.json.{ JValueResult, JacksonJsonSupport } +import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException} + +import scala.collection.JavaConverters._ + +class UserApi (implicit val swagger: Swagger) extends ScalatraServlet + with FileUploadSupport + with JacksonJsonSupport + with SwaggerSupport { protected implicit val jsonFormats: Formats = DefaultFormats protected val applicationDescription: String = "UserApi" @@ -11,238 +26,166 @@ with SwaggerSupport { contentType = formats("json") response.headers += ("Access-Control-Allow-Origin" -> "*") } - + val createUserOperation = (apiOperation[Unit]("createUser") - summary "Create user" - parameters ( - - - bodyParam[User]("body").description("").optional - - - ) - ) - - post("/user", operation(createUserOperation)) { - - - val body = parsedBody.extract[User] - + summary "Create user" + parameters(bodyParam[User]("body").description("").optional) + ) + post("/user",operation(createUserOperation)) { + + + + +bodyParam[User]("body").description("").optional + println("body: " + body) - + } + val createUsersWithArrayInputOperation = (apiOperation[Unit]("createUsersWithArrayInput") - summary "Creates list of users with given input array" - parameters ( - - - bodyParam[List[User]]("body").description("").optional - - - ) - ) - - post("/user/createWithArray", operation(createUsersWithArrayInputOperation)) { - - - val body = parsedBody.extract[List[User]] - + summary "Creates list of users with given input array" + parameters(bodyParam[List[User]]("body").description("").optional) + ) + post("/user/createWithArray",operation(createUsersWithArrayInputOperation)) { + + + + +bodyParam[List[User]]("body").description("").optional + println("body: " + body) - + } + val createUsersWithListInputOperation = (apiOperation[Unit]("createUsersWithListInput") - summary "Creates list of users with given input array" - parameters ( - - - bodyParam[List[User]]("body").description("").optional - - - ) - ) - - post("/user/createWithList", operation(createUsersWithListInputOperation)) { - - - val body = parsedBody.extract[List[User]] - + summary "Creates list of users with given input array" + parameters(bodyParam[List[User]]("body").description("").optional) + ) + post("/user/createWithList",operation(createUsersWithListInputOperation)) { + + + + +bodyParam[List[User]]("body").description("").optional + println("body: " + body) - + } + val loginUserOperation = (apiOperation[String]("loginUser") - summary "Logs user into the system" - parameters( - queryParam[String]("username").description("").optional - - - , - queryParam[String]("password").description("").optional - - ) - ) - - get("/user/login", operation(loginUserOperation)) { - - - val username = params.getAs[String]("username") - - - - - - - + summary "Logs user into the system" + parameters(queryParam[String]("username").description("").optional, + queryParam[String]("password").description("").optional) + ) + get("/user/login",operation(loginUserOperation)) { + + + + + + val username = params.getAs[String]("username") + + println("username: " + username) + + + + + + val password = params.getAs[String]("password") + - - - - - - - val password = params.getAs[String]("password") - - - - - - - - - + println("password: " + password) - + } + val logoutUserOperation = (apiOperation[Unit]("logoutUser") - summary "Logs out current logged in user session" - parameters( - ) - ) - - get("/user/logout", operation(logoutUserOperation)) { + summary "Logs out current logged in user session" + parameters() + ) + get("/user/logout",operation(logoutUserOperation)) { + } + val getUserByNameOperation = (apiOperation[User]("getUserByName") - summary "Get user by user name" - parameters ( - - pathParam[String]("username").description("") - - - ) - ) - - get("/user/{username}", operation(getUserByNameOperation)) { - - - val username = params.getOrElse("username", halt(400)) - - - - - - - - + summary "Get user by user name" + parameters(pathParam[String]("username").description("")) + ) + get("/user/{username}",operation(getUserByNameOperation)) { + + + + val username = params.getOrElse("username", halt(400)) + + println("username: " + username) - + } + val updateUserOperation = (apiOperation[Unit]("updateUser") - summary "Updated user" - parameters( - - pathParam[String]("username").description("") - - - , - - - bodyParam[User]("body").description("").optional - - ) - ) - - put("/user/{username}", operation(updateUserOperation)) { - - - val username = params.getOrElse("username", halt(400)) - - - - - - - - + summary "Updated user" + parameters(pathParam[String]("username").description(""), + bodyParam[User]("body").description("").optional) + ) + put("/user/{username}",operation(updateUserOperation)) { + + + + val username = params.getOrElse("username", halt(400)) + + println("username: " + username) - - - - - - - - - - - - - val body = parsedBody.extract[User] - - + + + + +bodyParam[User]("body").description("").optional + println("body: " + body) - + } + val deleteUserOperation = (apiOperation[Unit]("deleteUser") - summary "Delete user" - parameters ( - - pathParam[String]("username").description("") - - - ) - ) - - delete("/user/{username}", operation(deleteUserOperation)) { - - - val username = params.getOrElse("username", halt(400)) - - - - - - - - + summary "Delete user" + parameters(pathParam[String]("username").description("")) + ) + delete("/user/{username}",operation(deleteUserOperation)) { + + + + val username = params.getOrElse("username", halt(400)) + + println("username: " + username) - + } } \ No newline at end of file diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Category.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Category.scala index fccd9bb21fd9..d4ee7a692e66 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Category.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Category.scala @@ -1,7 +1,8 @@ package com.wordnik.client.model -case class Category( - id: Long, - name: String - ) + +case class Category ( + id: Long, + name: String +) diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Order.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Order.scala index 39a4cc297cba..918cf132d2cd 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Order.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Order.scala @@ -3,11 +3,11 @@ package com.wordnik.client.model import java.util.Date -case class Order( - id: Long, - petId: Long, - quantity: Int, - shipDate: Date, - status: String, - complete: Boolean - ) +case class Order ( + id: Long, + petId: Long, + quantity: Int, + shipDate: Date, + status: String, + complete: Boolean +) diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Pet.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Pet.scala index 47ecf5f29c9b..cea17dedae7b 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Pet.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Pet.scala @@ -1,11 +1,14 @@ package com.wordnik.client.model +import com.wordnik.client.model.Category +import com.wordnik.client.model.Tag -case class Pet( - id: Long, - category: Category, - name: String, - photoUrls: List[String], - tags: List[Tag], - status: String - ) + +case class Pet ( + id: Long, + category: Category, + name: String, + photoUrls: List[String], + tags: List[Tag], + status: String +) diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Tag.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Tag.scala index c38e6c1561a7..bd28dd4d44dc 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Tag.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/Tag.scala @@ -1,7 +1,8 @@ package com.wordnik.client.model -case class Tag( - id: Long, - name: String - ) + +case class Tag ( + id: Long, + name: String +) diff --git a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/User.scala b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/User.scala index 506e1453493c..acadf78f7a1c 100644 --- a/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/User.scala +++ b/samples/server/petstore/scalatra/src/main/scala/com/wordnik/client/model/User.scala @@ -1,13 +1,14 @@ package com.wordnik.client.model -case class User( - id: Long, - username: String, - firstName: String, - lastName: String, - email: String, - password: String, - phone: String, - userStatus: Int - ) + +case class User ( + id: Long, + username: String, + firstName: String, + lastName: String, + email: String, + password: String, + phone: String, + userStatus: Int +) diff --git a/samples/server/petstore/scalatra/src/main/webapp/WEB-INF/web.xml b/samples/server/petstore/scalatra/src/main/webapp/WEB-INF/web.xml index a6e529e4aecb..2a08440458ea 100644 --- a/samples/server/petstore/scalatra/src/main/webapp/WEB-INF/web.xml +++ b/samples/server/petstore/scalatra/src/main/webapp/WEB-INF/web.xml @@ -1,17 +1,17 @@ - - - org.scalatra.servlet.ScalatraListener - + + + org.scalatra.servlet.ScalatraListener + - - default - /*.html - /css/* - /js/*.js - /images/* - + + default + /*.html + /css/* + /js/*.js + /images/* + From b827d06077ac4e8c44695bf4ae5131cfa8423e31 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 08:48:04 -0700 Subject: [PATCH 28/78] fix for npe on map models --- .../codegen/examples/XmlExampleGenerator.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java index a6bfc7d5ddd6..15f22dfe8ffd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java @@ -84,12 +84,15 @@ public class XmlExampleGenerator { name = xml.getName(); } } - for (String pName : model.getProperties().keySet()) { - Property p = model.getProperties().get(pName); - if (p != null && p.getXml() != null && p.getXml().getAttribute() != null && p.getXml().getAttribute()) { - attributes.put(pName, p); - } else { - elements.put(pName, p); + // TODO: map objects will not enter this block + if(model.getProperties() != null) { + for (String pName : model.getProperties().keySet()) { + Property p = model.getProperties().get(pName); + if (p != null && p.getXml() != null && p.getXml().getAttribute() != null && p.getXml().getAttribute()) { + attributes.put(pName, p); + } else { + elements.put(pName, p); + } } } sb.append(indent(indent)).append(TAG_START); From 5c295629263eaee41ad6ade7a36347cc48ea0cfb Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 08:48:26 -0700 Subject: [PATCH 29/78] ensure body params are flattened when type ModelImpl --- .../main/java/io/swagger/codegen/InlineModelResolver.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 1a811ab4372a..a15511082bf5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -45,8 +45,13 @@ public class InlineModelResolver { if (bp.getSchema() != null) { Model model = bp.getSchema(); if(model instanceof ModelImpl) { + String modelName = uniqueName(bp.getName()); ModelImpl obj = (ModelImpl) model; flattenProperties(obj.getProperties(), pathname); + + bp.setSchema(new RefModel(modelName)); + addGenerated(modelName, model); + swagger.addDefinition(modelName, model); } else if (model instanceof ArrayModel) { ArrayModel am = (ArrayModel) model; From 19ea3ecf66e1b53be13045bcaed0d76fc0841cf5 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 08:48:44 -0700 Subject: [PATCH 30/78] update test for inline body param flattening --- .../java/io/swagger/codegen/InlineModelResolverTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index d3d8a60f8667..fa1bf8bab401 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -118,13 +118,13 @@ public class InlineModelResolverTest { Operation operation = swagger.getPaths().get("/hello").getGet(); BodyParameter bp = (BodyParameter)operation.getParameters().get(0); - assertTrue(bp.getSchema() instanceof ModelImpl); + assertTrue(bp.getSchema() instanceof RefModel); - Model body = swagger.getDefinitions().get("hello_address"); + Model body = swagger.getDefinitions().get("body"); assertTrue(body instanceof ModelImpl); ModelImpl impl = (ModelImpl) body; - assertNotNull(impl.getProperties().get("street")); + assertNotNull(impl.getProperties().get("address")); } @Test From 2f3a2413c7e6584add66a8cc3d121833a1fd3b73 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 08:49:26 -0700 Subject: [PATCH 31/78] rebuilt --- .../src/main/java/io/swagger/client/ApiClient.java | 2 +- .../src/main/java/io/swagger/client/ApiException.java | 2 +- .../src/main/java/io/swagger/client/Configuration.java | 2 +- .../default/src/main/java/io/swagger/client/JSON.java | 2 +- .../default/src/main/java/io/swagger/client/Pair.java | 2 +- .../src/main/java/io/swagger/client/StringUtil.java | 2 +- .../default/src/main/java/io/swagger/client/TypeRef.java | 2 +- .../src/main/java/io/swagger/client/api/PetApi.java | 2 +- .../src/main/java/io/swagger/client/api/StoreApi.java | 2 +- .../src/main/java/io/swagger/client/api/UserApi.java | 2 +- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../main/java/io/swagger/client/auth/Authentication.java | 2 +- .../main/java/io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../src/main/java/io/swagger/client/auth/OAuth.java | 2 +- .../src/main/java/io/swagger/client/model/Category.java | 2 +- .../src/main/java/io/swagger/client/model/Order.java | 2 +- .../src/main/java/io/swagger/client/model/Pet.java | 2 +- .../src/main/java/io/swagger/client/model/Tag.java | 2 +- .../src/main/java/io/swagger/client/model/User.java | 2 +- .../src/main/java/io/swagger/client/ApiClient.java | 2 +- .../src/main/java/io/swagger/client/ApiException.java | 2 +- .../src/main/java/io/swagger/client/Configuration.java | 2 +- .../jersey2/src/main/java/io/swagger/client/JSON.java | 2 +- .../jersey2/src/main/java/io/swagger/client/Pair.java | 2 +- .../src/main/java/io/swagger/client/StringUtil.java | 2 +- .../jersey2/src/main/java/io/swagger/client/TypeRef.java | 2 +- .../src/main/java/io/swagger/client/api/PetApi.java | 4 ++-- .../src/main/java/io/swagger/client/api/StoreApi.java | 2 +- .../src/main/java/io/swagger/client/api/UserApi.java | 2 +- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../main/java/io/swagger/client/auth/Authentication.java | 2 +- .../main/java/io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../src/main/java/io/swagger/client/auth/OAuth.java | 2 +- .../src/main/java/io/swagger/client/model/Category.java | 2 +- .../src/main/java/io/swagger/client/model/Order.java | 6 ++++-- .../src/main/java/io/swagger/client/model/Pet.java | 8 +++++--- .../src/main/java/io/swagger/client/model/Tag.java | 2 +- .../src/main/java/io/swagger/client/model/User.java | 2 +- .../src/main/java/io/swagger/client/ApiException.java | 2 +- .../src/main/java/io/swagger/client/Configuration.java | 2 +- .../okhttp-gson/src/main/java/io/swagger/client/Pair.java | 2 +- .../src/main/java/io/swagger/client/StringUtil.java | 2 +- .../src/main/java/io/swagger/client/api/PetApi.java | 2 +- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../main/java/io/swagger/client/auth/Authentication.java | 2 +- .../src/main/java/io/swagger/client/auth/OAuth.java | 2 +- .../src/main/java/io/swagger/client/model/Pet.java | 2 +- .../src/main/java/io/swagger/client/StringUtil.java | 2 +- .../src/main/java/io/swagger/client/model/Pet.java | 2 +- 49 files changed, 57 insertions(+), 53 deletions(-) diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java index 2171e0ac9b49..27ab8e3a03ad 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java @@ -39,7 +39,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class ApiClient { private Map hostMap = new HashMap(); private Map defaultHeaderMap = new HashMap(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java index 760a34fd4086..3822e42b013c 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java index 252388817f62..7cec037532c8 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java index 55a1a578403d..41f916b0fa90 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.datatype.joda.*; import java.io.IOException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class JSON { private ObjectMapper mapper; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java index c82e86bd5e43..bf84b4d5305a 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java index 49132678fa5f..f5346b74f4ea 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java index f5428ed2fede..70a2b5717135 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/TypeRef.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class TypeRef { private final Type type; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index d24150000137..fd5c75572af1 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class PetApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java index 5dc6e62b0e59..7ad51e326c9e 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java index 518c79be52cb..b165f066267d 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 3296813e1b2c..ebf0e735ef83 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java index 0e2eb685eee9..787b10f35dbb 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/Authentication.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 9ad9b46fd362..19336699f058 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -8,7 +8,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java index f9f27afa39e9..d4ccd9bf95c6 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class OAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index 9ef8073a69a2..1be35cc437b1 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class Category { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index e76f62cee8f7..4da1e926be04 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class Order { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index 217907a4d575..6b947af10929 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class Pet { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index 7d0e8ff0b27f..e34e5b727b98 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class Tag { private Long id = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index 9a588dd1b30a..38d95c8992b2 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:05:30.049-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T08:48:59.888-07:00") public class User { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java index 87838cb85699..cfb992970606 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java @@ -43,7 +43,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-24T21:52:47.417+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class ApiClient { private Map hostMap = new HashMap(); private Map defaultHeaderMap = new HashMap(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java index aec34b70511a..8e9def843a65 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java index 778c303e0ecb..b6e962cc98e1 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java index 4b14a48b8584..6b6b9ef9bf9f 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.datatype.joda.*; import java.io.IOException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class JSON { private ObjectMapper mapper; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java index 1695577aff01..9ffc6692d1e4 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java index f706fb4f9fa2..20c25650bd3b 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java index cbff07c94700..aeee64d1d6e3 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class TypeRef { private final Type type; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java index 26e0f275c8e2..b3ce29f1a3d3 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class PetApi { private ApiClient apiClient; @@ -243,7 +243,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "petstore_auth", "api_key" }; + String[] authNames = new String[] { "api_key", "petstore_auth" }; TypeRef returnType = new TypeRef() {}; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java index c95256c69aae..34aafea0b627 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java index 26c8d4b035f6..026e18d7d44b 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java @@ -17,7 +17,7 @@ import java.io.File; import java.util.Map; import java.util.HashMap; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 6082e3a6e4ca..f1f75071071d 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java index 6555e457ee56..19fac68bf039 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 909043e180e7..afe15d727161 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -8,7 +8,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java index d4f548b14125..b28f17491a02 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class OAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java index f09bf60128a7..50d3c6a110fa 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class Category { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java index 868c59a783d8..f315181195a4 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class Order { private Long id = null; @@ -19,7 +19,9 @@ public class Order { private Date shipDate = null; public enum StatusEnum { - PLACED("placed"), APPROVED("approved"), DELIVERED("delivered"); + PLACED("placed"), + APPROVED("approved"), + DELIVERED("delivered"); private String value; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java index 2a4a0b6c93d9..ca3bcb31680a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java @@ -2,8 +2,8 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; import io.swagger.client.model.Category; -import java.util.*; import io.swagger.client.model.Tag; +import java.util.*; @@ -12,7 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class Pet { private Long id = null; @@ -22,7 +22,9 @@ public class Pet { private List tags = new ArrayList(); public enum StatusEnum { - AVAILABLE("available"), PENDING("pending"), SOLD("sold"); + AVAILABLE("available"), + PENDING("pending"), + SOLD("sold"); private String value; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java index 2f7b12a9c2db..689ac04ab45a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class Tag { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java index be1089d751d9..a7adbddf79bf 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:51.678+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") public class User { private Long id = null; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java index a76d5872a900..35b795415ba5 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java index 7a4d947d5e5c..56e80e3e519e 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java index 5986bdd0db68..3cd335b01c9a 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java index 762f1c611610..a89da8ce563b 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java index debe576dc9dc..ff6a1e9b5583 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java @@ -297,7 +297,7 @@ public class PetApi { final String contentType = apiClient.selectHeaderContentType(contentTypes); headerParams.put("Content-Type", contentType); - String[] authNames = new String[] { "petstore_auth", "api_key" }; + String[] authNames = new String[] { "api_key", "petstore_auth" }; return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 6bfe672ea939..841d912c400f 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java index 3fa136f64c00..4e22317fce31 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java index 4e3b5a035bdb..b2a81e11c0d6 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T13:13:26.059+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") public class OAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java index 9ab5457e26ac..d1310e10dedb 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java @@ -2,8 +2,8 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; import io.swagger.client.model.Category; -import java.util.*; import io.swagger.client.model.Tag; +import java.util.*; import com.google.gson.annotations.SerializedName; diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java index 27a06a7cfc2d..bac4881beb32 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-18T14:07:38.326+02:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:22.261-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java index 9ab5457e26ac..d1310e10dedb 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java @@ -2,8 +2,8 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; import io.swagger.client.model.Category; -import java.util.*; import io.swagger.client.model.Tag; +import java.util.*; import com.google.gson.annotations.SerializedName; From b41a40f9be79b085d4f7150087ef2fb04904195f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:28:49 -0700 Subject: [PATCH 32/78] rebuilt --- samples/client/petstore/swift/Cartfile | 2 +- .../petstore/swift/PetstoreClient.podspec | 2 +- .../Classes/Swaggers/APIs.swift | 20 +-- .../Classes/Swaggers/APIs/PetAPI.swift | 136 +++++++++++------- .../Classes/Swaggers/APIs/StoreAPI.swift | 60 ++++---- .../Classes/Swaggers/APIs/UserAPI.swift | 84 +++++------ .../Swaggers/AlamofireImplementations.swift | 62 ++++++-- .../Classes/Swaggers/Extensions.swift | 2 +- .../Classes/Swaggers/Models.swift | 37 ++--- .../Classes/Swaggers/Models/Category.swift | 6 +- .../Classes/Swaggers/Models/Order.swift | 16 +-- .../Classes/Swaggers/Models/Pet.swift | 16 +-- .../Classes/Swaggers/Models/Tag.swift | 6 +- .../Classes/Swaggers/Models/User.swift | 18 +-- 14 files changed, 266 insertions(+), 201 deletions(-) diff --git a/samples/client/petstore/swift/Cartfile b/samples/client/petstore/swift/Cartfile index af74617bcf20..fbd9346e4680 100644 --- a/samples/client/petstore/swift/Cartfile +++ b/samples/client/petstore/swift/Cartfile @@ -1,2 +1,2 @@ -github "Alamofire/Alamofire" >= 1.2 +github "Alamofire/Alamofire" >= 2.0.0 github "mxcl/PromiseKit" >=1.5.3 diff --git a/samples/client/petstore/swift/PetstoreClient.podspec b/samples/client/petstore/swift/PetstoreClient.podspec index 00c0ef33e12b..473b130c40c5 100644 --- a/samples/client/petstore/swift/PetstoreClient.podspec +++ b/samples/client/petstore/swift/PetstoreClient.podspec @@ -7,5 +7,5 @@ Pod::Spec.new do |s| s.license = 'Apache License, Version 2.0' s.source_files = 'PetstoreClient/Classes/Swaggers/**/*.swift' s.dependency 'PromiseKit', '~> 2.1' - s.dependency 'Alamofire', '~> 1.3' + s.dependency 'Alamofire', '~> 2.0.0' end diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs.swift index e473915cf245..73c923e6486a 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs.swift @@ -6,19 +6,19 @@ import Foundation -class OneteamAPI { - static let basePath = "http://ec2-52-68-31-200.ap-northeast-1.compute.amazonaws.com/" +public class PetstoreClientAPI { + static let basePath = "http://petstore.swagger.io/v2" static var credential: NSURLCredential? static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory() } -class APIBase { +public class APIBase { func toParameters(encodable: JSONEncodable?) -> [String: AnyObject]? { let encoded: AnyObject? = encodable?.encodeToJSON() if encoded! is [AnyObject] { var dictionary = [String:AnyObject]() - for (index, item) in enumerate(encoded as! [AnyObject]) { + for (index, item) in (encoded as! [AnyObject]).enumerate() { dictionary["\(index)"] = item } return dictionary @@ -28,7 +28,7 @@ class APIBase { } } -class RequestBuilder { +public class RequestBuilder { var credential: NSURLCredential? var headers: [String:String] = [:] let parameters: [String:AnyObject]? @@ -36,24 +36,24 @@ class RequestBuilder { let method: String let URLString: String - required init(method: String, URLString: String, parameters: [String:AnyObject]?, isBody: Bool) { + required public init(method: String, URLString: String, parameters: [String:AnyObject]?, isBody: Bool) { self.method = method self.URLString = URLString self.parameters = parameters self.isBody = isBody } - func execute(completion: (response: Response?, erorr: NSError?) -> Void) { } + public func execute(completion: (response: Response?, erorr: ErrorType?) -> Void) { } - func addHeader(#name: String, value: String) -> Self { + public func addHeader(name name: String, value: String) -> Self { if !value.isEmpty { headers[name] = value } return self } - func addCredential() -> Self { - self.credential = OneteamAPI.credential + public func addCredential() -> Self { + self.credential = PetstoreClientAPI.credential return self } } diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift index 5202240bbc97..614e70b717ef 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift @@ -10,7 +10,7 @@ import PromiseKit extension PetstoreClientAPI { - class PetAPI: APIBase { + public class PetAPI: APIBase { /** @@ -22,19 +22,19 @@ extension PetstoreClientAPI { - type: oauth2 - name: petstore_auth - :param: body (body) Pet object that needs to be added to the store + - parameter body: (body) Pet object that needs to be added to the store - :returns: Promise> + - returns: RequestBuilder */ - func updatePet(#body: Pet?) -> RequestBuilder { + public class func updatePet(body body: Pet?) -> RequestBuilder { let path = "/pet" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "PUT", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "PUT", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -47,19 +47,19 @@ extension PetstoreClientAPI { - type: oauth2 - name: petstore_auth - :param: body (body) Pet object that needs to be added to the store + - parameter body: (body) Pet object that needs to be added to the store - :returns: Promise> + - returns: RequestBuilder */ - func addPet(#body: Pet?) -> RequestBuilder { + public class func addPet(body body: Pet?) -> RequestBuilder { let path = "/pet" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -87,7 +87,11 @@ extension PetstoreClientAPI { } ], contentType=application/json}, {example= 123456 doggie - string + + string + + + string , contentType=application/xml}] - examples: [{example=[ { @@ -106,17 +110,21 @@ extension PetstoreClientAPI { } ], contentType=application/json}, {example= 123456 doggie - string + + string + + + string , contentType=application/xml}] - :param: status (query) Status values that need to be considered for filter + - parameter status: (query) Status values that need to be considered for filter - :returns: Promise> + - returns: RequestBuilder<[Pet]> */ - func findPetsByStatus(#status: [String]?) -> RequestBuilder<[Pet]> { + public class func findPetsByStatus(status status: [String]?) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [ "status": status @@ -125,7 +133,7 @@ extension PetstoreClientAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: false) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: false) } /** @@ -153,7 +161,11 @@ extension PetstoreClientAPI { } ], contentType=application/json}, {example= 123456 doggie - string + + string + + + string , contentType=application/xml}] - examples: [{example=[ { @@ -172,17 +184,21 @@ extension PetstoreClientAPI { } ], contentType=application/json}, {example= 123456 doggie - string + + string + + + string , contentType=application/xml}] - :param: tags (query) Tags to filter by + - parameter tags: (query) Tags to filter by - :returns: Promise> + - returns: RequestBuilder<[Pet]> */ - func findPetsByTags(#tags: [String]?) -> RequestBuilder<[Pet]> { + public class func findPetsByTags(tags tags: [String]?) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [ "tags": tags @@ -191,7 +207,7 @@ extension PetstoreClientAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: false) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: false) } /** @@ -222,7 +238,11 @@ extension PetstoreClientAPI { }, contentType=application/json}, {example= 123456 doggie - string + + string + + + string , contentType=application/xml}] - examples: [{example={ @@ -241,25 +261,29 @@ extension PetstoreClientAPI { }, contentType=application/json}, {example= 123456 doggie - string + + string + + + string , contentType=application/xml}] - :param: petId (path) ID of pet that needs to be fetched + - parameter petId: (path) ID of pet that needs to be fetched - :returns: Promise> + - returns: RequestBuilder */ - func getPetById(#petId: Int) -> RequestBuilder { + public class func getPetById(petId petId: Int) -> RequestBuilder { var path = "/pet/{petId}" path = path.stringByReplacingOccurrencesOfString("{petId}", withString: "\(petId)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -272,23 +296,26 @@ extension PetstoreClientAPI { - type: oauth2 - name: petstore_auth - :param: petId (path) ID of pet that needs to be updated - :param: name (form) Updated name of the pet - :param: status (form) Updated status of the pet + - parameter petId: (path) ID of pet that needs to be updated + - parameter name: (form) Updated name of the pet + - parameter status: (form) Updated status of the pet - :returns: Promise> + - returns: RequestBuilder */ - func updatePetWithForm(#petId: String, name: String?, status: String?) -> RequestBuilder { + public class func updatePetWithForm(petId petId: String, name: String?, status: String?) -> RequestBuilder { var path = "/pet/{petId}" path = path.stringByReplacingOccurrencesOfString("{petId}", withString: "\(petId)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path - let nillableParameters: [String:AnyObject?] = [:] + let nillableParameters: [String:AnyObject?] = [ + "name": name, + "status": status + ] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: false) } /** @@ -301,21 +328,21 @@ extension PetstoreClientAPI { - type: oauth2 - name: petstore_auth - :param: petId (path) Pet id to delete + - parameter petId: (path) Pet id to delete - :returns: Promise> + - returns: RequestBuilder */ - func deletePet(#petId: Int) -> RequestBuilder { + public class func deletePet(petId petId: Int) -> RequestBuilder { var path = "/pet/{petId}" path = path.stringByReplacingOccurrencesOfString("{petId}", withString: "\(petId)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "DELETE", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "DELETE", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -328,23 +355,26 @@ extension PetstoreClientAPI { - type: oauth2 - name: petstore_auth - :param: petId (path) ID of pet to update - :param: additionalMetadata (form) Additional data to pass to server - :param: file (form) file to upload + - parameter petId: (path) ID of pet to update + - parameter additionalMetadata: (form) Additional data to pass to server + - parameter file: (form) file to upload - :returns: Promise> + - returns: RequestBuilder */ - func uploadFile(#petId: Int, additionalMetadata: String?, file: NSData?) -> RequestBuilder { + public class func uploadFile(petId petId: Int, additionalMetadata: String?, file: NSURL?) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" path = path.stringByReplacingOccurrencesOfString("{petId}", withString: "\(petId)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path - let nillableParameters: [String:AnyObject?] = [:] + let nillableParameters: [String:AnyObject?] = [ + "additionalMetadata": additionalMetadata, + "file": file + ] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: false) } } diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift index ad122129939a..92cedda725e9 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift @@ -10,7 +10,7 @@ import PromiseKit extension PetstoreClientAPI { - class StoreAPI: APIBase { + public class StoreAPI: APIBase { /** @@ -23,23 +23,23 @@ extension PetstoreClientAPI { - name: api_key - examples: [{example={ "key" : 123 -}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@3e, contentType=application/xml}] +}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}] - examples: [{example={ "key" : 123 -}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@3e, contentType=application/xml}] +}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}] - :returns: Promise> + - returns: RequestBuilder<[String:Int]> */ - func getInventory() -> RequestBuilder<[String:Int]> { + public class func getInventory() -> RequestBuilder<[String:Int]> { let path = "/store/inventory" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder<[String:Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -54,12 +54,12 @@ extension PetstoreClientAPI { "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-06-27T13:41:28.102+0000" + "shipDate" : "2015-10-20T06:12:32.347+0000" }, contentType=application/json}, {example= 123456 123456 0 - 2015-06-27T22:41:28.105Z + 2015-10-19T23:12:32.350Z string true , contentType=application/xml}] @@ -69,29 +69,29 @@ extension PetstoreClientAPI { "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-06-27T13:41:28.102+0000" + "shipDate" : "2015-10-20T06:12:32.347+0000" }, contentType=application/json}, {example= 123456 123456 0 - 2015-06-27T22:41:28.105Z + 2015-10-19T23:12:32.350Z string true , contentType=application/xml}] - :param: body (body) order placed for purchasing the pet + - parameter body: (body) order placed for purchasing the pet - :returns: Promise> + - returns: RequestBuilder */ - func placeOrder(#body: Order?) -> RequestBuilder { + public class func placeOrder(body body: Order?) -> RequestBuilder { let path = "/store/order" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -106,12 +106,12 @@ extension PetstoreClientAPI { "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-06-27T13:41:28.106+0000" + "shipDate" : "2015-10-20T06:12:32.351+0000" }, contentType=application/json}, {example= 123456 123456 0 - 2015-06-27T22:41:28.106Z + 2015-10-19T23:12:32.351Z string true , contentType=application/xml}] @@ -121,31 +121,31 @@ extension PetstoreClientAPI { "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-06-27T13:41:28.106+0000" + "shipDate" : "2015-10-20T06:12:32.351+0000" }, contentType=application/json}, {example= 123456 123456 0 - 2015-06-27T22:41:28.106Z + 2015-10-19T23:12:32.351Z string true , contentType=application/xml}] - :param: orderId (path) ID of pet that needs to be fetched + - parameter orderId: (path) ID of pet that needs to be fetched - :returns: Promise> + - returns: RequestBuilder */ - func getOrderById(#orderId: String) -> RequestBuilder { + public class func getOrderById(orderId orderId: String) -> RequestBuilder { var path = "/store/order/{orderId}" path = path.stringByReplacingOccurrencesOfString("{orderId}", withString: "\(orderId)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -155,21 +155,21 @@ extension PetstoreClientAPI { - DELETE /store/order/{orderId} - For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - :param: orderId (path) ID of the order that needs to be deleted + - parameter orderId: (path) ID of the order that needs to be deleted - :returns: Promise> + - returns: RequestBuilder */ - func deleteOrder(#orderId: String) -> RequestBuilder { + public class func deleteOrder(orderId orderId: String) -> RequestBuilder { var path = "/store/order/{orderId}" path = path.stringByReplacingOccurrencesOfString("{orderId}", withString: "\(orderId)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "DELETE", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "DELETE", URLString: URLString, parameters: parameters, isBody: true) } } diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift index 9c2833962146..19cf534cea83 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift @@ -10,7 +10,7 @@ import PromiseKit extension PetstoreClientAPI { - class UserAPI: APIBase { + public class UserAPI: APIBase { /** @@ -19,19 +19,19 @@ extension PetstoreClientAPI { - POST /user - This can only be done by the logged in user. - :param: body (body) Created user object + - parameter body: (body) Created user object - :returns: Promise> + - returns: RequestBuilder */ - func createUser(#body: User?) -> RequestBuilder { + public class func createUser(body body: User?) -> RequestBuilder { let path = "/user" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -41,19 +41,19 @@ extension PetstoreClientAPI { - POST /user/createWithArray - - :param: body (body) List of user object + - parameter body: (body) List of user object - :returns: Promise> + - returns: RequestBuilder */ - func createUsersWithArrayInput(#body: [User]?) -> RequestBuilder { + public class func createUsersWithArrayInput(body body: [User]?) -> RequestBuilder { let path = "/user/createWithArray" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -63,19 +63,19 @@ extension PetstoreClientAPI { - POST /user/createWithList - - :param: body (body) List of user object + - parameter body: (body) List of user object - :returns: Promise> + - returns: RequestBuilder */ - func createUsersWithListInput(#body: [User]?) -> RequestBuilder { + public class func createUsersWithListInput(body body: [User]?) -> RequestBuilder { let path = "/user/createWithList" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "POST", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -87,14 +87,14 @@ extension PetstoreClientAPI { - examples: [{example="aeiou", contentType=application/json}, {example=string, contentType=application/xml}] - examples: [{example="aeiou", contentType=application/json}, {example=string, contentType=application/xml}] - :param: username (query) The user name for login - :param: password (query) The password for login in clear text + - parameter username: (query) The user name for login + - parameter password: (query) The password for login in clear text - :returns: Promise> + - returns: RequestBuilder */ - func loginUser(#username: String?, password: String?) -> RequestBuilder { + public class func loginUser(username username: String?, password: String?) -> RequestBuilder { let path = "/user/login" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [ "username": username, @@ -104,7 +104,7 @@ extension PetstoreClientAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: false) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: false) } /** @@ -114,18 +114,18 @@ extension PetstoreClientAPI { - GET /user/logout - - :returns: Promise> + - returns: RequestBuilder */ - func logoutUser() -> RequestBuilder { + public class func logoutUser() -> RequestBuilder { let path = "/user/logout" - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -145,21 +145,21 @@ extension PetstoreClientAPI { "userStatus" : 0 }, contentType=application/json}] - :param: username (path) The name that needs to be fetched. Use user1 for testing. + - parameter username: (path) The name that needs to be fetched. Use user1 for testing. - :returns: Promise> + - returns: RequestBuilder */ - func getUserByName(#username: String) -> RequestBuilder { + public class func getUserByName(username username: String) -> RequestBuilder { var path = "/user/{username}" path = path.stringByReplacingOccurrencesOfString("{username}", withString: "\(username)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "GET", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -169,21 +169,21 @@ extension PetstoreClientAPI { - PUT /user/{username} - This can only be done by the logged in user. - :param: username (path) name that need to be deleted - :param: body (body) Updated user object + - parameter username: (path) name that need to be deleted + - parameter body: (body) Updated user object - :returns: Promise> + - returns: RequestBuilder */ - func updateUser(#username: String, body: User?) -> RequestBuilder { + public class func updateUser(username username: String, body: User?) -> RequestBuilder { var path = "/user/{username}" path = path.stringByReplacingOccurrencesOfString("{username}", withString: "\(username)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let parameters = body?.encodeToJSON() as? [String:AnyObject] let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "PUT", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "PUT", URLString: URLString, parameters: parameters, isBody: true) } /** @@ -193,21 +193,21 @@ extension PetstoreClientAPI { - DELETE /user/{username} - This can only be done by the logged in user. - :param: username (path) The name that needs to be deleted + - parameter username: (path) The name that needs to be deleted - :returns: Promise> + - returns: RequestBuilder */ - func deleteUser(#username: String) -> RequestBuilder { + public class func deleteUser(username username: String) -> RequestBuilder { var path = "/user/{username}" path = path.stringByReplacingOccurrencesOfString("{username}", withString: "\(username)", options: .LiteralSearch, range: nil) - let url = PetstoreClientAPI.basePath + path + let URLString = PetstoreClientAPI.basePath + path let nillableParameters: [String:AnyObject?] = [:] let parameters = APIHelper.rejectNil(nillableParameters) let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder(method: "DELETE", URLString: url, parameters: parameters, isBody: true) + return requestBuilder.init(method: "DELETE", URLString: URLString, parameters: parameters, isBody: true) } } diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift index 61e2bf2886d5..21791168ab2f 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift @@ -20,7 +20,7 @@ class AlamofireRequestBuilder: RequestBuilder { super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody) } - override func execute(completion: (response: Response?, erorr: NSError?) -> Void) { + override func execute(completion: (response: Response?, erorr: ErrorType?) -> Void) { let managerId = NSUUID().UUIDString // Create a new manager for each request to customize its request header let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() @@ -29,23 +29,57 @@ class AlamofireRequestBuilder: RequestBuilder { managerStore[managerId] = manager let encoding = isBody ? Alamofire.ParameterEncoding.JSON : Alamofire.ParameterEncoding.URL - let request = manager.request(Alamofire.Method(rawValue: method)!, URLString, parameters: parameters, encoding: encoding) + let xMethod = Alamofire.Method(rawValue: method) + let fileKeys = parameters == nil ? [] : parameters!.filter { $1.isKindOfClass(NSURL) } + .map { $0.0 } + + if fileKeys.count > 0 { + manager.upload( + xMethod!, URLString, headers: nil, + multipartFormData: { mpForm in + for (k, v) in self.parameters! { + switch v { + case let fileURL as NSURL: + mpForm.appendBodyPart(fileURL: fileURL, name: k) + break + case let string as NSString: + mpForm.appendBodyPart(data: string.dataUsingEncoding(NSUTF8StringEncoding)!, name: k) + break + case let number as NSNumber: + mpForm.appendBodyPart(data: number.stringValue.dataUsingEncoding(NSUTF8StringEncoding)!, name: k) + break + default: + fatalError("Unprocessable value \(v) with key \(k)") + break + } + } + }, + encodingMemoryThreshold: Manager.MultipartFormDataEncodingMemoryThreshold, + encodingCompletion: { encodingResult in + switch encodingResult { + case .Success(let upload, _, _): + self.processRequest(upload, managerId, completion) + case .Failure(let encodingError): + completion(response: nil, erorr: encodingError) + } + } + ) + } else { + processRequest(manager.request(xMethod!, URLString, parameters: parameters, encoding: encoding), managerId, completion) + } + + } + + private func processRequest(request: Request, _ managerId: String, _ completion: (response: Response?, erorr: ErrorType?) -> Void) { if let credential = self.credential { request.authenticate(usingCredential: credential) } - request.responseJSON(options: .AllowFragments) { (req, res, json, error) in + request.responseJSON(options: .AllowFragments) { (req, res, result) in managerStore.removeValueForKey(managerId) - if let error = error { - completion(response: nil, erorr: error) - return - } - if res!.statusCode >= 400 { - //TODO: Add error entity - let userInfo: [NSObject : AnyObject] = (json != nil) ? ["data": json!] : [:] - let error = NSError(domain: res!.URL!.URLString, code: res!.statusCode, userInfo: userInfo) - completion(response: nil, erorr: error) + if result.isFailure { + completion(response: nil, erorr: result.error) return } @@ -54,7 +88,7 @@ class AlamofireRequestBuilder: RequestBuilder { completion(response: response, erorr: nil) return } - if let json: AnyObject = json { + if let json: AnyObject = result.value { let body = Decoders.decode(clazz: T.self, source: json) let response = Response(response: res!, body: body) completion(response: response, erorr: nil) @@ -66,7 +100,7 @@ class AlamofireRequestBuilder: RequestBuilder { completion(response: response, erorr: nil) return } - + completion(response: nil, erorr: NSError(domain: "localhost", code: 500, userInfo: ["reason": "unreacheable code"])) } } diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Extensions.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Extensions.swift index 80af4351f048..0a9f74b3e764 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Extensions.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Extensions.swift @@ -65,7 +65,7 @@ extension NSDate: JSONEncodable { } extension RequestBuilder { - func execute() -> Promise> { + public func execute() -> Promise> { let deferred = Promise>.defer() self.execute { (response: Response?, error: NSError?) in if let response = response { diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift index d8ef5b109c22..7ac67ca1b4ad 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift @@ -10,18 +10,18 @@ protocol JSONEncodable { func encodeToJSON() -> AnyObject } -class Response { - let statusCode: Int - let header: [String: String] - let body: T +public class Response { + public let statusCode: Int + public let header: [String: String] + public let body: T - init(statusCode: Int, header: [String: String], body: T) { + public init(statusCode: Int, header: [String: String], body: T) { self.statusCode = statusCode self.header = header self.body = body } - convenience init(response: NSHTTPURLResponse, body: T) { + public convenience init(response: NSHTTPURLResponse, body: T) { let rawHeader = response.allHeaderFields var header = [String:String]() for (key, value) in rawHeader { @@ -35,17 +35,17 @@ private var once = dispatch_once_t() class Decoders { static private var decoders = Dictionary AnyObject)>() - static func addDecoder(#clazz: T.Type, decoder: ((AnyObject) -> T)) { + static func addDecoder(clazz clazz: T.Type, decoder: ((AnyObject) -> T)) { let key = "\(T.self)" decoders[key] = { decoder($0) as! AnyObject } } - static func decode(#clazz: [T].Type, source: AnyObject) -> [T] { + static func decode(clazz clazz: [T].Type, source: AnyObject) -> [T] { let array = source as! [AnyObject] return array.map { Decoders.decode(clazz: T.self, source: $0) } } - static func decode(#clazz: [Key:T].Type, source: AnyObject) -> [Key:T] { + static func decode(clazz clazz: [Key:T].Type, source: AnyObject) -> [Key:T] { let sourceDictinoary = source as! [Key: AnyObject] var dictionary = [Key:T]() for (key, value) in sourceDictinoary { @@ -54,7 +54,7 @@ class Decoders { return dictionary } - static func decode(#clazz: T.Type, source: AnyObject) -> T { + static func decode(clazz clazz: T.Type, source: AnyObject) -> T { initialize() if source is T { return source as! T @@ -68,7 +68,7 @@ class Decoders { } } - static func decodeOptional(#clazz: T.Type, source: AnyObject?) -> T? { + static func decodeOptional(clazz clazz: T.Type, source: AnyObject?) -> T? { if source is NSNull { return nil } @@ -77,7 +77,7 @@ class Decoders { } } - static func decodeOptional(#clazz: [T].Type, source: AnyObject?) -> [T]? { + static func decodeOptional(clazz clazz: [T].Type, source: AnyObject?) -> [T]? { if source is NSNull { return nil } @@ -86,7 +86,7 @@ class Decoders { } } - static func decodeOptional(#clazz: [Key:T].Type, source: AnyObject?) -> [Key:T]? { + static func decodeOptional(clazz clazz: [Key:T].Type, source: AnyObject?) -> [Key:T]? { if source is NSNull { return nil } @@ -100,6 +100,7 @@ class Decoders { let formatters = [ "yyyy-MM-dd", "yyyy-MM-dd'T'HH:mm:ssZZZZZ", + "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ", "yyyy-MM-dd'T'HH:mm:ss'Z'" ].map { (format: String) -> NSDateFormatter in let formatter = NSDateFormatter() @@ -120,7 +121,7 @@ class Decoders { // Decoder for User Decoders.addDecoder(clazz: User.self) { (source: AnyObject) -> User in let sourceDictionary = source as! [NSObject:AnyObject] - var instance = User() + let instance = User() instance.id = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["id"]) instance.username = Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["username"]) instance.firstName = Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["firstName"]) @@ -136,7 +137,7 @@ class Decoders { // Decoder for Category Decoders.addDecoder(clazz: Category.self) { (source: AnyObject) -> Category in let sourceDictionary = source as! [NSObject:AnyObject] - var instance = Category() + let instance = Category() instance.id = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["id"]) instance.name = Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"]) return instance @@ -146,7 +147,7 @@ class Decoders { // Decoder for Pet Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject) -> Pet in let sourceDictionary = source as! [NSObject:AnyObject] - var instance = Pet() + let instance = Pet() instance.id = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["id"]) instance.category = Decoders.decodeOptional(clazz: Category.self, source: sourceDictionary["category"]) instance.name = Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"]) @@ -160,7 +161,7 @@ class Decoders { // Decoder for Tag Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject) -> Tag in let sourceDictionary = source as! [NSObject:AnyObject] - var instance = Tag() + let instance = Tag() instance.id = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["id"]) instance.name = Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"]) return instance @@ -170,7 +171,7 @@ class Decoders { // Decoder for Order Decoders.addDecoder(clazz: Order.self) { (source: AnyObject) -> Order in let sourceDictionary = source as! [NSObject:AnyObject] - var instance = Order() + let instance = Order() instance.id = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["id"]) instance.petId = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["petId"]) instance.quantity = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["quantity"]) diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Category.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Category.swift index eab3e7b9e012..1356bd1db989 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Category.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Category.swift @@ -8,10 +8,10 @@ import Foundation -class Category: JSONEncodable { +public class Category: JSONEncodable { - var id: Int? - var name: String? + public var id: Int? + public var name: String? // MARK: JSONEncodable diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Order.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Order.swift index 11884502bc1f..25f7745f3068 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Order.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Order.swift @@ -8,21 +8,21 @@ import Foundation -class Order: JSONEncodable { +public class Order: JSONEncodable { - enum Status: String { + public enum Status: String { case Placed = "placed" case Approved = "approved" case Delivered = "delivered" } - var id: Int? - var petId: Int? - var quantity: Int? - var shipDate: NSDate? + public var id: Int? + public var petId: Int? + public var quantity: Int? + public var shipDate: NSDate? /** Order Status */ - var status: Status? - var complete: Bool? + public var status: Status? + public var complete: Bool? // MARK: JSONEncodable diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Pet.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Pet.swift index 0baac38a285e..b94e5a7a6de8 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Pet.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Pet.swift @@ -8,21 +8,21 @@ import Foundation -class Pet: JSONEncodable { +public class Pet: JSONEncodable { - enum Status: String { + public enum Status: String { case Available = "available" case Pending = "pending" case Sold = "sold" } - var id: Int? - var category: Category? - var name: String? - var photoUrls: [String]? - var tags: [Tag]? + public var id: Int? + public var category: Category? + public var name: String? + public var photoUrls: [String]? + public var tags: [Tag]? /** pet status in the store */ - var status: Status? + public var status: Status? // MARK: JSONEncodable diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Tag.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Tag.swift index 2951506a0dc6..b7ab8a3a0cfe 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Tag.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/Tag.swift @@ -8,10 +8,10 @@ import Foundation -class Tag: JSONEncodable { +public class Tag: JSONEncodable { - var id: Int? - var name: String? + public var id: Int? + public var name: String? // MARK: JSONEncodable diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/User.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/User.swift index f2461238dc70..a7592185021d 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/User.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models/User.swift @@ -8,17 +8,17 @@ import Foundation -class User: JSONEncodable { +public class User: JSONEncodable { - var id: Int? - var username: String? - var firstName: String? - var lastName: String? - var email: String? - var password: String? - var phone: String? + public var id: Int? + public var username: String? + public var firstName: String? + public var lastName: String? + public var email: String? + public var password: String? + public var phone: String? /** User Status */ - var userStatus: Int? + public var userStatus: Int? // MARK: JSONEncodable From d2dc333699d5986a13bfb1187cf9785383919c59 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:29:25 -0700 Subject: [PATCH 33/78] rebuilt --- samples/server/petstore/jaxrs/README.md | 8 ++--- samples/server/petstore/jaxrs/pom.xml | 2 +- .../gen/java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/gen/java/io/swagger/api/PetApi.java | 28 +++++++-------- .../java/io/swagger/api/PetApiService.java | 2 +- .../src/gen/java/io/swagger/api/StoreApi.java | 20 +++++------ .../java/io/swagger/api/StoreApiService.java | 2 +- .../src/gen/java/io/swagger/api/UserApi.java | 34 +++++++++---------- .../java/io/swagger/api/UserApiService.java | 2 +- .../gen/java/io/swagger/model/Category.java | 2 +- .../src/gen/java/io/swagger/model/Order.java | 2 +- .../src/gen/java/io/swagger/model/Pet.java | 2 +- .../src/gen/java/io/swagger/model/Tag.java | 2 +- .../src/gen/java/io/swagger/model/User.java | 2 +- 17 files changed, 57 insertions(+), 59 deletions(-) diff --git a/samples/server/petstore/jaxrs/README.md b/samples/server/petstore/jaxrs/README.md index 3ffa01fb2571..3f0809d4734d 100644 --- a/samples/server/petstore/jaxrs/README.md +++ b/samples/server/petstore/jaxrs/README.md @@ -1,10 +1,8 @@ # Swagger generated server ## Overview -This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the +This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub. This -is an example of building a swagger-enabled scalatra server. +is an example of building a swagger-enabled JAX-RS server. -This example uses the [scalatra](http://scalatra.org/) framework. To see how to make this your own, look here: - -[README](https://github.com/swagger-api/swagger-codegen/tree/master/samples/server-generator/scalatra) \ No newline at end of file +This example uses the [JAX-RS](https://jax-rs-spec.java.net/) framework. diff --git a/samples/server/petstore/jaxrs/pom.xml b/samples/server/petstore/jaxrs/pom.xml index ae9f3e06162f..dda5043b7d17 100644 --- a/samples/server/petstore/jaxrs/pom.xml +++ b/samples/server/petstore/jaxrs/pom.xml @@ -168,7 +168,7 @@ - 1.5.3 + 1.5.4 9.2.9.v20150224 1.18.1 1.6.3 diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java index 300636842ba1..104d965b69c5 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java index e7ad9b521ac4..572e6fceef74 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java index 6d6958c1c907..0b5c42769dc3 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java index c3eab326e644..aa936276c65a 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java index f583f1e64cfc..3ac477ac0f99 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class PetApi { private final PetApiService delegate = PetApiServiceFactory.getPetApi(); @@ -37,15 +37,15 @@ public class PetApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = Void.class) }) public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) throws NotFoundException { - return delegate.updatePet(body); + return delegate.updatePet(body); } @POST @@ -57,7 +57,7 @@ public class PetApi { public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) throws NotFoundException { - return delegate.addPet(body); + return delegate.addPet(body); } @GET @Path("/findByStatus") @@ -71,7 +71,7 @@ public class PetApi { public Response findPetsByStatus(@ApiParam(value = "Status values that need to be considered for filter", defaultValue="available") @QueryParam("status") List status) throws NotFoundException { - return delegate.findPetsByStatus(status); + return delegate.findPetsByStatus(status); } @GET @Path("/findByTags") @@ -85,7 +85,7 @@ public class PetApi { public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List tags) throws NotFoundException { - return delegate.findPetsByTags(tags); + return delegate.findPetsByTags(tags); } @GET @Path("/{petId}") @@ -93,15 +93,15 @@ public class PetApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Pet.class), - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Pet.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Pet.class), + + @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Pet.class) }) public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("petId") Long petId) throws NotFoundException { - return delegate.getPetById(petId); + return delegate.getPetById(petId); } @POST @Path("/{petId}") @@ -115,7 +115,7 @@ public class PetApi { @ApiParam(value = "Updated name of the pet" )@FormParam("name") String name, @ApiParam(value = "Updated status of the pet" )@FormParam("status") String status) throws NotFoundException { - return delegate.updatePetWithForm(petId,name,status); + return delegate.updatePetWithForm(petId,name,status); } @DELETE @Path("/{petId}") @@ -128,7 +128,7 @@ public class PetApi { public Response deletePet(@ApiParam(value = "Pet id to delete",required=true ) @PathParam("petId") Long petId, @ApiParam(value = "" )@HeaderParam("api_key") String apiKey) throws NotFoundException { - return delegate.deletePet(petId,apiKey); + return delegate.deletePet(petId,apiKey); } @POST @Path("/{petId}/uploadImage") @@ -143,7 +143,7 @@ public class PetApi { @FormDataParam("file") InputStream inputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws NotFoundException { - return delegate.uploadFile(petId,additionalMetadata,fileDetail); + return delegate.uploadFile(petId,additionalMetadata,fileDetail); } } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java index 708dc647f911..db679325bbf1 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public abstract class PetApiService { public abstract Response updatePet(Pet body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java index a487439cb3f9..7b60217462c8 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class StoreApi { private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); @@ -41,7 +41,7 @@ public class StoreApi { public Response getInventory() throws NotFoundException { - return delegate.getInventory(); + return delegate.getInventory(); } @POST @Path("/order") @@ -55,7 +55,7 @@ public class StoreApi { public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body) throws NotFoundException { - return delegate.placeOrder(body); + return delegate.placeOrder(body); } @GET @Path("/order/{orderId}") @@ -63,15 +63,15 @@ public class StoreApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Order.class), - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Order.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Order.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Order.class), + + @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Order.class) }) public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("orderId") String orderId) throws NotFoundException { - return delegate.getOrderById(orderId); + return delegate.getOrderById(orderId); } @DELETE @Path("/order/{orderId}") @@ -79,13 +79,13 @@ public class StoreApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Void.class) }) public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true ) @PathParam("orderId") String orderId) throws NotFoundException { - return delegate.deleteOrder(orderId); + return delegate.deleteOrder(orderId); } } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java index 955d640d1b5f..53e8d6820fdf 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public abstract class StoreApiService { public abstract Response getInventory() diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java index d7bde1b17534..c94578133886 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class UserApi { private final UserApiService delegate = UserApiServiceFactory.getUserApi(); @@ -41,7 +41,7 @@ public class UserApi { public Response createUser(@ApiParam(value = "Created user object" ) User body) throws NotFoundException { - return delegate.createUser(body); + return delegate.createUser(body); } @POST @Path("/createWithArray") @@ -53,7 +53,7 @@ public class UserApi { public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body) throws NotFoundException { - return delegate.createUsersWithArrayInput(body); + return delegate.createUsersWithArrayInput(body); } @POST @Path("/createWithList") @@ -65,7 +65,7 @@ public class UserApi { public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body) throws NotFoundException { - return delegate.createUsersWithListInput(body); + return delegate.createUsersWithListInput(body); } @GET @Path("/login") @@ -80,7 +80,7 @@ public class UserApi { public Response loginUser(@ApiParam(value = "The user name for login") @QueryParam("username") String username, @ApiParam(value = "The password for login in clear text") @QueryParam("password") String password) throws NotFoundException { - return delegate.loginUser(username,password); + return delegate.loginUser(username,password); } @GET @Path("/logout") @@ -92,7 +92,7 @@ public class UserApi { public Response logoutUser() throws NotFoundException { - return delegate.logoutUser(); + return delegate.logoutUser(); } @GET @Path("/{username}") @@ -100,15 +100,15 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Get user by user name", notes = "", response = User.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = User.class), - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = User.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = User.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = User.class), + + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = User.class) }) - public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing. ",required=true ) @PathParam("username") String username) + public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.",required=true ) @PathParam("username") String username) throws NotFoundException { - return delegate.getUserByName(username); + return delegate.getUserByName(username); } @PUT @Path("/{username}") @@ -116,14 +116,14 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true ) @PathParam("username") String username, @ApiParam(value = "Updated user object" ) User body) throws NotFoundException { - return delegate.updateUser(username,body); + return delegate.updateUser(username,body); } @DELETE @Path("/{username}") @@ -131,13 +131,13 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) @io.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = Void.class), - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true ) @PathParam("username") String username) throws NotFoundException { - return delegate.deleteUser(username); + return delegate.deleteUser(username); } } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java index e838a00e2829..61e9172b99f9 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public abstract class UserApiService { public abstract Response createUser(User body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java index 57666c8444b8..87e148117eb4 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java index 99b3c758473e..ed6863e835ed 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java index 0b01a065022e..1b925c85c244 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java index 935e04025c87..cfe622228c67 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java index 6d6fb0c1d94e..b456c64321ac 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-08-23T23:29:16.812-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T08:49:54.299-07:00") public class User { private Long id = null; From e3151c57a07ca65a49664c2d07c55941a732b874 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:29:48 -0700 Subject: [PATCH 34/78] rebuilt --- samples/client/petstore/qt5cpp/client/SWGPet.h | 6 +++--- samples/client/petstore/qt5cpp/client/SWGPetApi.cpp | 2 +- samples/client/petstore/qt5cpp/client/SWGPetApi.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/client/petstore/qt5cpp/client/SWGPet.h b/samples/client/petstore/qt5cpp/client/SWGPet.h index 3f9320f15074..e9cb4d082331 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPet.h +++ b/samples/client/petstore/qt5cpp/client/SWGPet.h @@ -10,10 +10,10 @@ #include -#include -#include "SWGCategory.h" -#include #include "SWGTag.h" +#include +#include "SWGCategory.h" +#include #include "SWGObject.h" diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp index 0be3a197cd1f..2171b8ed50ce 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp @@ -431,7 +431,7 @@ SWGPetApi::updatePetWithFormCallback(HttpRequestWorker * worker) { emit updatePetWithFormSignal(); } void -SWGPetApi::deletePet(QString* apiKey, qint64 petId) { +SWGPetApi::deletePet(qint64 petId, QString* apiKey) { QString fullPath; fullPath.append(this->host).append(this->basePath).append("/pet/{petId}"); diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.h b/samples/client/petstore/qt5cpp/client/SWGPetApi.h index 488865729b94..f74f8f10839f 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.h +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.h @@ -28,7 +28,7 @@ public: void findPetsByTags(QList* tags); void getPetById(qint64 petId); void updatePetWithForm(QString* petId, QString* name, QString* status); - void deletePet(QString* apiKey, qint64 petId); + void deletePet(qint64 petId, QString* apiKey); void uploadFile(qint64 petId, QString* additionalMetadata, SWGHttpRequestInputFileElement* file); private: From abe49804494449d0f49addd1e0614020afc0d52f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:30:19 -0700 Subject: [PATCH 35/78] rebuilt --- samples/client/petstore/tizen/client/SamiOrder.h | 4 ++-- samples/client/petstore/tizen/client/SamiPet.h | 2 +- samples/client/petstore/tizen/client/SamiPetApi.cpp | 2 +- samples/client/petstore/tizen/client/SamiPetApi.h | 2 +- samples/client/petstore/tizen/client/SamiUser.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/client/petstore/tizen/client/SamiOrder.h b/samples/client/petstore/tizen/client/SamiOrder.h index 357812da47c4..08b79cc195c2 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 5ec3194fb1b3..a16582484364 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/SamiPetApi.cpp b/samples/client/petstore/tizen/client/SamiPetApi.cpp index 69997d3cee08..787e79964c28 100644 --- a/samples/client/petstore/tizen/client/SamiPetApi.cpp +++ b/samples/client/petstore/tizen/client/SamiPetApi.cpp @@ -380,7 +380,7 @@ deletePetProcessor(HttpResponse* pHttpResponse, void (* handler)(void*, SamiErro } void -SamiPetApi::deletePetWithCompletion(String* apiKey, Long* petId, void(*success)(SamiError*)) { +SamiPetApi::deletePetWithCompletion(Long* petId, String* apiKey, void(*success)(SamiError*)) { client = new SamiApiClient(); client->success(&deletePetProcessor, (void(*)(void*, SamiError*))success); diff --git a/samples/client/petstore/tizen/client/SamiPetApi.h b/samples/client/petstore/tizen/client/SamiPetApi.h index 05844bd88bd4..a0fc01f08f57 100644 --- a/samples/client/petstore/tizen/client/SamiPetApi.h +++ b/samples/client/petstore/tizen/client/SamiPetApi.h @@ -39,7 +39,7 @@ public: updatePetWithFormWithCompletion(String* petId, String* name, String* status, void(* handler)(SamiError*)); void - deletePetWithCompletion(String* apiKey, Long* petId, void(* handler)(SamiError*)); + deletePetWithCompletion(Long* petId, String* apiKey, void(* handler)(SamiError*)); void uploadFileWithCompletion(Long* petId, String* additionalMetadata, SamiFile* file, void(* handler)(SamiError*)); diff --git a/samples/client/petstore/tizen/client/SamiUser.h b/samples/client/petstore/tizen/client/SamiUser.h index 90b0ede10648..a874f9c62451 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 { From 96380bbc838e85039c92a12950af22a6675a5988 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:31:17 -0700 Subject: [PATCH 36/78] rebuilt --- .../client/petstore/objc/SwaggerClient.podspec | 8 ++++---- .../petstore/objc/SwaggerClient/SWGApiClient.m | 15 ++++++++++----- .../client/petstore/objc/SwaggerClient/SWGPet.h | 2 +- .../petstore/objc/SwaggerClient/SWGPetApi.m | 2 +- .../petstore/objc/SwaggerClient/SWGUserApi.h | 2 +- .../petstore/objc/SwaggerClient/SWGUserApi.m | 2 +- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/samples/client/petstore/objc/SwaggerClient.podspec b/samples/client/petstore/objc/SwaggerClient.podspec index 4445bc52ad23..0afb511073c3 100644 --- a/samples/client/petstore/objc/SwaggerClient.podspec +++ b/samples/client/petstore/objc/SwaggerClient.podspec @@ -21,10 +21,10 @@ Pod::Spec.new do |s| s.framework = 'SystemConfiguration' - s.homepage = "" - s.license = "" - s.source = { :git => ".git", :tag => "#{s.version}" } - s.author = { "" => "" } + s.homepage = "https://github.com/swagger-api/swagger-codegen" + s.license = "MIT" + s.source = { :git => "https://github.com/swagger-api/swagger-codegen.git", :tag => "#{s.version}" } + s.author = { "Swagger" => "apiteam@swagger.io" } s.source_files = 'SwaggerClient/**/*' s.public_header_files = 'SwaggerClient/**/*.h' diff --git a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m index fc3c79078625..dcd33575fc6f 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m @@ -311,9 +311,10 @@ static void (^reachabilityChangeBlock)(int); range:NSMakeRange(0, [class length])]; if (match) { + NSArray *dataArray = data; innerType = [class substringWithRange:[match rangeAtIndex:1]]; - resultArray = [NSMutableArray arrayWithCapacity:[data count]]; + resultArray = [NSMutableArray arrayWithCapacity:[dataArray count]]; [data enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [resultArray addObject:[self deserialize:obj class:innerType]]; } @@ -332,9 +333,10 @@ static void (^reachabilityChangeBlock)(int); range:NSMakeRange(0, [class length])]; if (match) { + NSArray *dataArray = data; innerType = [class substringWithRange:[match rangeAtIndex:1]]; - resultArray = [NSMutableArray arrayWithCapacity:[data count]]; + resultArray = [NSMutableArray arrayWithCapacity:[dataArray count]]; [data enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [resultArray addObject:[self deserialize:obj class:innerType]]; }]; @@ -352,9 +354,10 @@ static void (^reachabilityChangeBlock)(int); range:NSMakeRange(0, [class length])]; if (match) { + NSDictionary *dataDict = data; NSString *valueType = [class substringWithRange:[match rangeAtIndex:2]]; - resultDict = [NSMutableDictionary dictionaryWithCapacity:[data count]]; + resultDict = [NSMutableDictionary dictionaryWithCapacity:[dataDict count]]; [data enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [resultDict setValue:[self deserialize:obj class:valueType] forKey:key]; }]; @@ -728,7 +731,8 @@ static void (^reachabilityChangeBlock)(int); return [object ISO8601String]; } else if ([object isKindOfClass:[NSArray class]]) { - NSMutableArray *sanitizedObjs = [NSMutableArray arrayWithCapacity:[object count]]; + NSArray *objectArray = object; + NSMutableArray *sanitizedObjs = [NSMutableArray arrayWithCapacity:[objectArray count]]; [object enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { if (obj) { [sanitizedObjs addObject:[self sanitizeForSerialization:obj]]; @@ -737,7 +741,8 @@ static void (^reachabilityChangeBlock)(int); return sanitizedObjs; } else if ([object isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *sanitizedObjs = [NSMutableDictionary dictionaryWithCapacity:[object count]]; + NSDictionary *objectDict = object; + NSMutableDictionary *sanitizedObjs = [NSMutableDictionary dictionaryWithCapacity:[objectDict count]]; [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if (obj) { [sanitizedObjs setValue:[self sanitizeForSerialization:obj] forKey:key]; diff --git a/samples/client/petstore/objc/SwaggerClient/SWGPet.h b/samples/client/petstore/objc/SwaggerClient/SWGPet.h index 84f10969e5be..e340e0e2b86a 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGPet.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGPet.h @@ -7,8 +7,8 @@ * Do not edit the class manually. */ -#import "SWGCategory.h" #import "SWGTag.h" +#import "SWGCategory.h" @protocol SWGPet diff --git a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m index b890e03570fb..156700c9a769 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m @@ -450,7 +450,7 @@ static SWGPetApi* singletonAPI = nil; NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; // Authentication setting - NSArray *authSettings = @[@"petstore_auth", @"api_key"]; + NSArray *authSettings = @[@"api_key", @"petstore_auth"]; id bodyParam = nil; NSMutableDictionary *formParams = [[NSMutableDictionary alloc] init]; diff --git a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h index ec41ecd99078..21f314684fd7 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h @@ -99,7 +99,7 @@ /// Get user by user name /// /// -/// @param username The name that needs to be fetched. Use user1 for testing. +/// @param username The name that needs to be fetched. Use user1 for testing. /// /// /// @return SWGUser* diff --git a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m index 5c3c313b2e23..75cf8d51b0ea 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m @@ -470,7 +470,7 @@ static SWGUserApi* singletonAPI = nil; /// /// Get user by user name /// -/// @param username The name that needs to be fetched. Use user1 for testing. +/// @param username The name that needs to be fetched. Use user1 for testing. /// /// @returns SWGUser* /// From a21f08118e8b35cd194812a8addbf36c09f50f98 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:31:42 -0700 Subject: [PATCH 37/78] rebuilt --- samples/client/petstore/akka-scala/pom.xml | 2 +- .../scala/io/swagger/client/api/PetApi.scala | 12 +- .../io/swagger/client/api/StoreApi.scala | 8 +- .../scala/io/swagger/client/api/UserApi.scala | 14 +- samples/client/petstore/android-java/pom.xml | 2 +- .../java/io/swagger/client/api/UserApi.java | 2 +- .../java/io/swagger/client/model/Pet.java | 4 +- .../scala/io/swagger/client/api/PetApi.scala | 5 +- .../perl/lib/WWW/SwaggerClient/PetApi.pm | 2 +- .../perl/lib/WWW/SwaggerClient/UserApi.pm | 2 +- .../php/SwaggerClient-php/lib/Api/PetApi.php | 6 +- .../lib/ObjectSerializer.php | 2 +- .../python/swagger_client/__init__.py | 2 +- .../python/swagger_client/apis/__init__.py | 2 +- .../python/swagger_client/apis/pet_api.py | 2 +- samples/client/petstore/ruby/lib/petstore.rb | 2 +- .../petstore/ruby/lib/petstore/api/pet_api.rb | 2 +- .../ruby/lib/petstore/api/user_api.rb | 2 +- samples/client/petstore/scala/pom.xml | 2 +- .../scala/io/swagger/client/api/PetApi.scala | 4 +- .../scala/io/swagger/client/api/UserApi.scala | 2 +- .../typescript-angular/API/Client/api.d.ts | 2 +- .../client/petstore/typescript-node/api.ts | 462 +++++++++--------- 23 files changed, 283 insertions(+), 262 deletions(-) diff --git a/samples/client/petstore/akka-scala/pom.xml b/samples/client/petstore/akka-scala/pom.xml index a047ad86cc01..a6e81fb75f4f 100644 --- a/samples/client/petstore/akka-scala/pom.xml +++ b/samples/client/petstore/akka-scala/pom.xml @@ -217,7 +217,7 @@ 2.3.9 1.2 2.2 - 1.5.0 + 1.5.4 1.0.0 4.8.1 diff --git a/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/PetApi.scala b/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/PetApi.scala index 591d055dad6b..7decd51b03c0 100644 --- a/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/PetApi.scala +++ b/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/PetApi.scala @@ -11,18 +11,18 @@ object PetApi { /** * * Expected answers: - * code 405 : (Validation exception) - * code 404 : (Pet not found) * code 400 : (Invalid ID supplied) + * code 404 : (Pet not found) + * code 405 : (Validation exception) * * @param body Pet object that needs to be added to the store */ def updatePet(body: Option[Pet] = None): ApiRequest[Unit] = ApiRequest[Unit](ApiMethods.PUT, "http://petstore.swagger.io/v2", "/pet", "application/json") .withBody(body) - .withErrorResponse[Unit](405) - .withErrorResponse[Unit](404) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) + .withErrorResponse[Unit](405) /** * @@ -70,9 +70,9 @@ object PetApi { * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions * * Expected answers: - * code 404 : (Pet not found) * code 200 : Pet (successful operation) * code 400 : (Invalid ID supplied) + * code 404 : (Pet not found) * * Available security schemes: * api_key (apiKey) @@ -83,9 +83,9 @@ object PetApi { ApiRequest[Pet](ApiMethods.GET, "http://petstore.swagger.io/v2", "/pet/{petId}", "application/json") .withApiKey(apiKey, "api_key", HEADER) .withPathParam("petId", petId) - .withErrorResponse[Unit](404) .withSuccessResponse[Pet](200) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) /** * diff --git a/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/StoreApi.scala b/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/StoreApi.scala index 686e85e105dc..f3ab28da05f2 100644 --- a/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/StoreApi.scala +++ b/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/StoreApi.scala @@ -39,33 +39,33 @@ object StoreApi { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * * Expected answers: - * code 404 : (Order not found) * code 200 : Order (successful operation) * code 400 : (Invalid ID supplied) + * code 404 : (Order not found) * * @param orderId ID of pet that needs to be fetched */ def getOrderById(orderId: String): ApiRequest[Order] = ApiRequest[Order](ApiMethods.GET, "http://petstore.swagger.io/v2", "/store/order/{orderId}", "application/json") .withPathParam("orderId", orderId) - .withErrorResponse[Unit](404) .withSuccessResponse[Order](200) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) /** * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * * Expected answers: - * code 404 : (Order not found) * code 400 : (Invalid ID supplied) + * code 404 : (Order not found) * * @param orderId ID of the order that needs to be deleted */ def deleteOrder(orderId: String): ApiRequest[Unit] = ApiRequest[Unit](ApiMethods.DELETE, "http://petstore.swagger.io/v2", "/store/order/{orderId}", "application/json") .withPathParam("orderId", orderId) - .withErrorResponse[Unit](404) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) diff --git a/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/UserApi.scala b/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/UserApi.scala index 4c2ab10e9e7b..b759a799e3dc 100644 --- a/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/UserApi.scala +++ b/samples/client/petstore/akka-scala/src/main/scala/io/swagger/client/api/UserApi.scala @@ -72,25 +72,25 @@ object UserApi { /** * * Expected answers: - * code 404 : (User not found) * code 200 : User (successful operation) * code 400 : (Invalid username supplied) + * code 404 : (User not found) * - * @param username The name that needs to be fetched. Use user1 for testing. + * @param username The name that needs to be fetched. Use user1 for testing. */ def getUserByName(username: String): ApiRequest[User] = ApiRequest[User](ApiMethods.GET, "http://petstore.swagger.io/v2", "/user/{username}", "application/json") .withPathParam("username", username) - .withErrorResponse[Unit](404) .withSuccessResponse[User](200) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) /** * This can only be done by the logged in user. * * Expected answers: - * code 404 : (User not found) * code 400 : (Invalid user supplied) + * code 404 : (User not found) * * @param username name that need to be deleted * @param body Updated user object @@ -99,23 +99,23 @@ object UserApi { ApiRequest[Unit](ApiMethods.PUT, "http://petstore.swagger.io/v2", "/user/{username}", "application/json") .withBody(body) .withPathParam("username", username) - .withErrorResponse[Unit](404) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) /** * This can only be done by the logged in user. * * Expected answers: - * code 404 : (User not found) * code 400 : (Invalid username supplied) + * code 404 : (User not found) * * @param username The name that needs to be deleted */ def deleteUser(username: String): ApiRequest[Unit] = ApiRequest[Unit](ApiMethods.DELETE, "http://petstore.swagger.io/v2", "/user/{username}", "application/json") .withPathParam("username", username) - .withErrorResponse[Unit](404) .withErrorResponse[Unit](400) + .withErrorResponse[Unit](404) diff --git a/samples/client/petstore/android-java/pom.xml b/samples/client/petstore/android-java/pom.xml index 639000ecc6d9..f9c620b7528e 100644 --- a/samples/client/petstore/android-java/pom.xml +++ b/samples/client/petstore/android-java/pom.xml @@ -145,7 +145,7 @@ - 1.5.0 + 1.5.4 2.3.1 4.8.1 1.0.0 diff --git a/samples/client/petstore/android-java/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/android-java/src/main/java/io/swagger/client/api/UserApi.java index a16a745c7f8a..4c1bf7b1a3dd 100644 --- a/samples/client/petstore/android-java/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/android-java/src/main/java/io/swagger/client/api/UserApi.java @@ -316,7 +316,7 @@ public class UserApi { /** * Get user by user name * - * @param username The name that needs to be fetched. Use user1 for testing. + * @param username The name that needs to be fetched. Use user1 for testing. * @return User */ public User getUserByName (String username) throws ApiException { 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 90a840e6e422..20865ad54340 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 @@ -18,9 +18,9 @@ public class Pet { @SerializedName("name") private String name = null; @SerializedName("photoUrls") - private List photoUrls = new ArrayList() ; + private List photoUrls = null; @SerializedName("tags") - private List tags = new ArrayList() ; + private List tags = null; public enum StatusEnum { available, pending, sold, }; 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 index 4b6a2b155d9a..84b6ba4c7ead 100644 --- 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 @@ -145,8 +145,9 @@ class PetApi(client: TransportClient, config: SwaggerConfig) extends ApiClient(c } - def deletePet(apiKey: Option[String] = None, - petId: Long)(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { + def deletePet(petId: Long, + apiKey: Option[String] = None + )(implicit reader: ClientResponseReader[Unit]): Future[Unit] = { // create path and map variables val path = (addFmt("/pet/{petId}") replaceAll ("\\{" + "petId" + "\\}",petId.toString)) diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm index bf085889e79d..19a3d88b2994 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm @@ -387,8 +387,8 @@ sub update_pet_with_form { # # Deletes a pet # -# @param string $api_key (optional) # @param int $pet_id Pet id to delete (required) +# @param string $api_key (optional) # @return void # sub delete_pet { diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/UserApi.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/UserApi.pm index 4c6e293aaaa6..e1088a0839e0 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/UserApi.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/UserApi.pm @@ -305,7 +305,7 @@ sub logout_user { # # Get user by user name # -# @param string $username The name that needs to be fetched. Use user1 for testing. (required) +# @param string $username The name that needs to be fetched. Use user1 for testing. (required) # @return User # sub get_user_by_name { diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php index e8dea97be931..cb0df4e8af0b 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php @@ -424,9 +424,6 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - //TODO support oauth - $apiKey = $this->apiClient->getApiKeyWithPrefix('api_key'); if (isset($apiKey)) { $headerParams['api_key'] = $apiKey; @@ -434,6 +431,9 @@ class PetApi + + //TODO support oauth + // make the API Call try { diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index efdc1c896ab4..0d281b9d1fa3 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -193,7 +193,7 @@ class ObjectSerializer $deserialized = $values; } elseif ($class === '\DateTime') { $deserialized = new \DateTime($data); - } elseif (in_array($class, array('void', 'bool', 'string', 'double', 'byte', 'mixed', 'integer', 'float', 'int', 'DateTime', 'number', 'boolean', 'object'))) { + } elseif (in_array($class, array('integer', 'int', 'void', 'number', 'object', 'double', 'float', 'byte', 'DateTime', 'string', 'mixed', 'boolean', 'bool'))) { settype($data, $class); $deserialized = $data; } elseif ($class === '\SplFileObject') { diff --git a/samples/client/petstore/python/swagger_client/__init__.py b/samples/client/petstore/python/swagger_client/__init__.py index 6e7b59f36fde..f61c5d55262a 100644 --- a/samples/client/petstore/python/swagger_client/__init__.py +++ b/samples/client/petstore/python/swagger_client/__init__.py @@ -9,8 +9,8 @@ from .models.order import Order # import apis into sdk package from .apis.user_api import UserApi -from .apis.store_api import StoreApi from .apis.pet_api import PetApi +from .apis.store_api import StoreApi # import ApiClient from .api_client import ApiClient diff --git a/samples/client/petstore/python/swagger_client/apis/__init__.py b/samples/client/petstore/python/swagger_client/apis/__init__.py index c0e09458f950..592a56e282d2 100644 --- a/samples/client/petstore/python/swagger_client/apis/__init__.py +++ b/samples/client/petstore/python/swagger_client/apis/__init__.py @@ -2,5 +2,5 @@ from __future__ import absolute_import # import apis into api package from .user_api import UserApi -from .store_api import StoreApi from .pet_api import PetApi +from .store_api import StoreApi diff --git a/samples/client/petstore/python/swagger_client/apis/pet_api.py b/samples/client/petstore/python/swagger_client/apis/pet_api.py index b162cc534c38..ad053a7d72d9 100644 --- a/samples/client/petstore/python/swagger_client/apis/pet_api.py +++ b/samples/client/petstore/python/swagger_client/apis/pet_api.py @@ -409,7 +409,7 @@ class PetApi(object): select_header_content_type([]) # Authentication setting - auth_settings = ['petstore_auth', 'api_key'] + auth_settings = ['api_key', 'petstore_auth'] response = self.api_client.call_api(resource_path, method, path_params, diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb index c13e99f29fc4..61640d687ac7 100644 --- a/samples/client/petstore/ruby/lib/petstore.rb +++ b/samples/client/petstore/ruby/lib/petstore.rb @@ -14,8 +14,8 @@ require 'petstore/models/order' # APIs require 'petstore/api/user_api' -require 'petstore/api/store_api' require 'petstore/api/pet_api' +require 'petstore/api/store_api' module Petstore class << self diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index a9d30a00147c..4b956aeadcc6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -237,7 +237,7 @@ module Petstore post_body = nil - auth_names = ['petstore_auth', 'api_key'] + auth_names = ['api_key', 'petstore_auth'] result = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb index f4672e2a3585..7f546330f3aa 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -248,7 +248,7 @@ module Petstore # Get user by user name # - # @param username The name that needs to be fetched. Use user1 for testing. + # @param username The name that needs to be fetched. Use user1 for testing. # @param [Hash] opts the optional parameters # @return [User] def get_user_by_name(username, opts = {}) diff --git a/samples/client/petstore/scala/pom.xml b/samples/client/petstore/scala/pom.xml index 9f39f4e45ce8..ff38920fcdd8 100644 --- a/samples/client/petstore/scala/pom.xml +++ b/samples/client/petstore/scala/pom.xml @@ -210,7 +210,7 @@ 1.2 2.2 1.19 - 1.5.0 + 1.5.4 1.0.5 1.0.0 2.4.2 diff --git a/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala b/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala index 0d0b3c83ed24..a11cab9211b6 100644 --- a/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala +++ b/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala @@ -325,11 +325,11 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2", /** * Deletes a pet * - * @param apiKey * @param petId Pet id to delete + * @param apiKey * @return void */ - def deletePet (apiKey: String, petId: Long) = { + def deletePet (petId: Long, apiKey: String) = { // create path and map variables val path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId)) diff --git a/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/UserApi.scala b/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/UserApi.scala index 5a7b38f620aa..802cf01c25bc 100644 --- a/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/UserApi.scala +++ b/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/UserApi.scala @@ -263,7 +263,7 @@ class UserApi(val defBasePath: String = "http://petstore.swagger.io/v2", /** * Get user by user name * - * @param username The name that needs to be fetched. Use user1 for testing. + * @param username The name that needs to be fetched. Use user1 for testing. * @return User */ def getUserByName (username: String) : Option[User] = { diff --git a/samples/client/petstore/typescript-angular/API/Client/api.d.ts b/samples/client/petstore/typescript-angular/API/Client/api.d.ts index 46123a07ad33..19c60623dc94 100644 --- a/samples/client/petstore/typescript-angular/API/Client/api.d.ts +++ b/samples/client/petstore/typescript-angular/API/Client/api.d.ts @@ -5,5 +5,5 @@ /// /// -/// /// +/// diff --git a/samples/client/petstore/typescript-node/api.ts b/samples/client/petstore/typescript-node/api.ts index 742169a608e6..148782a4000a 100644 --- a/samples/client/petstore/typescript-node/api.ts +++ b/samples/client/petstore/typescript-node/api.ts @@ -149,6 +149,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + var useFormData = false; var deferred = promise.defer<{ response: http.ClientResponse; }>(); @@ -194,6 +195,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + var useFormData = false; var deferred = promise.defer<{ response: http.ClientResponse; }>(); @@ -239,6 +241,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + var useFormData = false; var deferred = promise.defer<{ response: http.ClientResponse; }>(); @@ -284,6 +287,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + if (username !== undefined) { queryParameters['username'] = username; } @@ -336,6 +340,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + var useFormData = false; var deferred = promise.defer<{ response: http.ClientResponse; }>(); @@ -382,6 +387,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'username' is set if (!username) { throw new Error('Missing required parameter username when calling getUserByName'); @@ -433,6 +439,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'username' is set if (!username) { throw new Error('Missing required parameter username when calling updateUser'); @@ -485,6 +492,7 @@ export class UserApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'username' is set if (!username) { throw new Error('Missing required parameter username when calling deleteUser'); @@ -527,224 +535,6 @@ export class UserApi { return deferred.promise; } } -export class StoreApi { - private basePath = 'http://petstore.swagger.io/v2'; - public authentications = { - 'default': new VoidAuth(), - 'api_key': new ApiKeyAuth('header', 'api_key'), - 'petstore_auth': new OAuth(), - } - - constructor(url: string, basePath?: string); - constructor(private url: string, basePathOrUsername: string, password?: string, basePath?: string) { - if (password) { - if (basePath) { - this.basePath = basePath; - } - } else { - if (basePathOrUsername) { - this.basePath = basePathOrUsername - } - } - } - - set apiKey(key: string) { - this.authentications.api_key.apiKey = key; - } - - public getInventory () : Promise<{ response: http.ClientResponse; body: { [key: string]: number; }; }> { - var path = this.url + this.basePath + '/store/inventory'; - - var queryParameters: any = {}; - var headerParams: any = {}; - var formParams: any = {}; - - var useFormData = false; - - var deferred = promise.defer<{ response: http.ClientResponse; body: { [key: string]: number; }; }>(); - - var requestOptions: request.Options = { - method: 'GET', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - } - - this.authentications.api_key.applyToRequest(requestOptions); - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - - public placeOrder (body?: Order) : Promise<{ response: http.ClientResponse; body: Order; }> { - var path = this.url + this.basePath + '/store/order'; - - var queryParameters: any = {}; - var headerParams: any = {}; - var formParams: any = {}; - - var useFormData = false; - - var deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); - - var requestOptions: request.Options = { - method: 'POST', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - body: body, - } - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - - public getOrderById (orderId: string) : Promise<{ response: http.ClientResponse; body: Order; }> { - var path = this.url + this.basePath + '/store/order/{orderId}'; - - path = path.replace('{' + 'orderId' + '}', String(orderId)); - - var queryParameters: any = {}; - var headerParams: any = {}; - var formParams: any = {}; - - // verify required parameter 'orderId' is set - if (!orderId) { - throw new Error('Missing required parameter orderId when calling getOrderById'); - } - - var useFormData = false; - - var deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); - - var requestOptions: request.Options = { - method: 'GET', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - } - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } - - public deleteOrder (orderId: string) : Promise<{ response: http.ClientResponse; }> { - var path = this.url + this.basePath + '/store/order/{orderId}'; - - path = path.replace('{' + 'orderId' + '}', String(orderId)); - - var queryParameters: any = {}; - var headerParams: any = {}; - var formParams: any = {}; - - // verify required parameter 'orderId' is set - if (!orderId) { - throw new Error('Missing required parameter orderId when calling deleteOrder'); - } - - var useFormData = false; - - var deferred = promise.defer<{ response: http.ClientResponse; }>(); - - var requestOptions: request.Options = { - method: 'DELETE', - qs: queryParameters, - headers: headerParams, - uri: path, - json: true, - } - - this.authentications.default.applyToRequest(requestOptions); - - if (Object.keys(formParams).length) { - if (useFormData) { - (requestOptions).formData = formParams; - } else { - requestOptions.form = formParams; - } - } - - request(requestOptions, (error, response, body) => { - if (error) { - deferred.reject(error); - } else { - if (response.statusCode >= 200 && response.statusCode <= 299) { - deferred.resolve({ response: response, body: body }); - } else { - deferred.reject({ response: response, body: body }); - } - } - }); - - return deferred.promise; - } -} export class PetApi { private basePath = 'http://petstore.swagger.io/v2'; public authentications = { @@ -777,6 +567,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + var useFormData = false; var deferred = promise.defer<{ response: http.ClientResponse; }>(); @@ -824,6 +615,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + var useFormData = false; var deferred = promise.defer<{ response: http.ClientResponse; }>(); @@ -871,6 +663,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + if (status !== undefined) { queryParameters['status'] = status; } @@ -921,6 +714,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + if (tags !== undefined) { queryParameters['tags'] = tags; } @@ -973,6 +767,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling getPetById'); @@ -990,10 +785,10 @@ export class PetApi { json: true, } - this.authentications.petstore_auth.applyToRequest(requestOptions); - this.authentications.api_key.applyToRequest(requestOptions); + this.authentications.petstore_auth.applyToRequest(requestOptions); + this.authentications.default.applyToRequest(requestOptions); if (Object.keys(formParams).length) { @@ -1028,6 +823,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling updatePetWithForm'); @@ -1089,12 +885,13 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling deletePet'); } - headerParams['apiKey'] = apiKey; + headerParams['api_key'] = apiKey; var useFormData = false; @@ -1144,6 +941,7 @@ export class PetApi { var headerParams: any = {}; var formParams: any = {}; + // verify required parameter 'petId' is set if (!petId) { throw new Error('Missing required parameter petId when calling uploadFile'); @@ -1197,3 +995,225 @@ export class PetApi { return deferred.promise; } } +export class StoreApi { + private basePath = 'http://petstore.swagger.io/v2'; + public authentications = { + 'default': new VoidAuth(), + 'api_key': new ApiKeyAuth('header', 'api_key'), + 'petstore_auth': new OAuth(), + } + + constructor(url: string, basePath?: string); + constructor(private url: string, basePathOrUsername: string, password?: string, basePath?: string) { + if (password) { + if (basePath) { + this.basePath = basePath; + } + } else { + if (basePathOrUsername) { + this.basePath = basePathOrUsername + } + } + } + + set apiKey(key: string) { + this.authentications.api_key.apiKey = key; + } + + public getInventory () : Promise<{ response: http.ClientResponse; body: { [key: string]: number; }; }> { + var path = this.url + this.basePath + '/store/inventory'; + + var queryParameters: any = {}; + var headerParams: any = {}; + var formParams: any = {}; + + + var useFormData = false; + + var deferred = promise.defer<{ response: http.ClientResponse; body: { [key: string]: number; }; }>(); + + var requestOptions: request.Options = { + method: 'GET', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + } + + this.authentications.api_key.applyToRequest(requestOptions); + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } + + public placeOrder (body?: Order) : Promise<{ response: http.ClientResponse; body: Order; }> { + var path = this.url + this.basePath + '/store/order'; + + var queryParameters: any = {}; + var headerParams: any = {}; + var formParams: any = {}; + + + var useFormData = false; + + var deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); + + var requestOptions: request.Options = { + method: 'POST', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + body: body, + } + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } + + public getOrderById (orderId: string) : Promise<{ response: http.ClientResponse; body: Order; }> { + var path = this.url + this.basePath + '/store/order/{orderId}'; + + path = path.replace('{' + 'orderId' + '}', String(orderId)); + + var queryParameters: any = {}; + var headerParams: any = {}; + var formParams: any = {}; + + + // verify required parameter 'orderId' is set + if (!orderId) { + throw new Error('Missing required parameter orderId when calling getOrderById'); + } + + var useFormData = false; + + var deferred = promise.defer<{ response: http.ClientResponse; body: Order; }>(); + + var requestOptions: request.Options = { + method: 'GET', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + } + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } + + public deleteOrder (orderId: string) : Promise<{ response: http.ClientResponse; }> { + var path = this.url + this.basePath + '/store/order/{orderId}'; + + path = path.replace('{' + 'orderId' + '}', String(orderId)); + + var queryParameters: any = {}; + var headerParams: any = {}; + var formParams: any = {}; + + + // verify required parameter 'orderId' is set + if (!orderId) { + throw new Error('Missing required parameter orderId when calling deleteOrder'); + } + + var useFormData = false; + + var deferred = promise.defer<{ response: http.ClientResponse; }>(); + + var requestOptions: request.Options = { + method: 'DELETE', + qs: queryParameters, + headers: headerParams, + uri: path, + json: true, + } + + this.authentications.default.applyToRequest(requestOptions); + + if (Object.keys(formParams).length) { + if (useFormData) { + (requestOptions).formData = formParams; + } else { + requestOptions.form = formParams; + } + } + + request(requestOptions, (error, response, body) => { + if (error) { + deferred.reject(error); + } else { + if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ response: response, body: body }); + } else { + deferred.reject({ response: response, body: body }); + } + } + }); + + return deferred.promise; + } +} From b2506ab5982b2d8a589e7ba266b19b9cee7990da Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:32:19 -0700 Subject: [PATCH 38/78] rebuilt --- .../server/petstore/nodejs/api/swagger.json | 62 +++++++++---------- .../nodejs/controllers/StoreService.js | 4 +- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/samples/server/petstore/nodejs/api/swagger.json b/samples/server/petstore/nodejs/api/swagger.json index 4f091973cf2d..4c0ad6ea42f8 100644 --- a/samples/server/petstore/nodejs/api/swagger.json +++ b/samples/server/petstore/nodejs/api/swagger.json @@ -97,10 +97,6 @@ ], "responses": { - "404": { - "description" : "User not found" -} - , "200": { "description" : "successful operation", "schema" : { @@ -123,6 +119,10 @@ "400": { "description" : "Invalid username supplied" } + , + "404": { + "description" : "User not found" +} } @@ -154,13 +154,13 @@ ], "responses": { - "404": { - "description" : "User not found" -} - , "400": { "description" : "Invalid user supplied" } + , + "404": { + "description" : "User not found" +} } @@ -183,13 +183,13 @@ ], "responses": { - "404": { - "description" : "User not found" -} - , "400": { "description" : "Invalid username supplied" } + , + "404": { + "description" : "User not found" +} } @@ -312,16 +312,16 @@ ], "responses": { - "405": { - "description" : "Validation exception" + "400": { + "description" : "Invalid ID supplied" } , "404": { "description" : "Pet not found" } , - "400": { - "description" : "Invalid ID supplied" + "405": { + "description" : "Validation exception" } @@ -416,9 +416,6 @@ "description" : "Status values that need to be considered for filter", "required" : false, "type" : "array", - "items" : { - "type" : "string" - }, "collectionFormat" : "multi", "default" : "available" } @@ -460,9 +457,6 @@ "description" : "Tags to filter by", "required" : false, "type" : "array", - "items" : { - "type" : "string" - }, "collectionFormat" : "multi" } @@ -508,10 +502,6 @@ ], "responses": { - "404": { - "description" : "Pet not found" -} - , "200": { "description" : "successful operation", "schema" : { @@ -522,6 +512,10 @@ "400": { "description" : "Invalid ID supplied" } + , + "404": { + "description" : "Pet not found" +} } @@ -621,10 +615,6 @@ ], "responses": { - "404": { - "description" : "Order not found" -} - , "200": { "description" : "successful operation", "schema" : { @@ -635,6 +625,10 @@ "400": { "description" : "Invalid ID supplied" } + , + "404": { + "description" : "Order not found" +} } @@ -657,13 +651,13 @@ ], "responses": { - "404": { - "description" : "Order not found" -} - , "400": { "description" : "Invalid ID supplied" } + , + "404": { + "description" : "Order not found" +} } diff --git a/samples/server/petstore/nodejs/controllers/StoreService.js b/samples/server/petstore/nodejs/controllers/StoreService.js index 27c18517ff55..e00a6aee9b9b 100644 --- a/samples/server/petstore/nodejs/controllers/StoreService.js +++ b/samples/server/petstore/nodejs/controllers/StoreService.js @@ -24,7 +24,7 @@ exports.placeOrder = function(body) { "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-10-08T15:56:08.367+0000" + "shipDate" : "2015-10-20T06:12:23.907+0000" }; @@ -43,7 +43,7 @@ exports.getOrderById = function(orderId) { "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-10-08T15:56:08.371+0000" + "shipDate" : "2015-10-20T06:12:23.911+0000" }; From a6bd0773f79a4c7fd823a7ffc2aa8d61bba83da8 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 10:56:18 -0700 Subject: [PATCH 39/78] added files --- .../src/main/java/io/swagger/client/auth/OAuthFlow.java | 5 +++++ .../src/main/java/io/swagger/client/auth/OAuthFlow.java | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuthFlow.java create mode 100644 samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuthFlow.java diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuthFlow.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuthFlow.java new file mode 100644 index 000000000000..597ec99b48b7 --- /dev/null +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuthFlow.java @@ -0,0 +1,5 @@ +package io.swagger.client.auth; + +public enum OAuthFlow { + accessCode, implicit, password, application +} \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuthFlow.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuthFlow.java new file mode 100644 index 000000000000..597ec99b48b7 --- /dev/null +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuthFlow.java @@ -0,0 +1,5 @@ +package io.swagger.client.auth; + +public enum OAuthFlow { + accessCode, implicit, password, application +} \ No newline at end of file From 295af57c9ad6f941e7cc1df92b146352f1fe9e6e Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 11:31:21 -0700 Subject: [PATCH 40/78] fixed build error --- .../java/io/swagger/client/ApiClient.java | 2 +- .../java/io/swagger/client/ApiException.java | 2 +- .../java/io/swagger/client/Configuration.java | 2 +- .../src/main/java/io/swagger/client/JSON.java | 2 +- .../src/main/java/io/swagger/client/Pair.java | 2 +- .../java/io/swagger/client/StringUtil.java | 2 +- .../main/java/io/swagger/client/TypeRef.java | 2 +- .../java/io/swagger/client/api/PetApi.java | 20 +++++++++---------- .../java/io/swagger/client/api/StoreApi.java | 16 ++++++++------- .../java/io/swagger/client/api/UserApi.java | 14 +++++++------ .../io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../swagger/client/auth/Authentication.java | 2 +- .../io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../java/io/swagger/client/auth/OAuth.java | 2 +- .../io/swagger/client/model/Category.java | 2 +- .../java/io/swagger/client/model/Order.java | 6 +----- .../java/io/swagger/client/model/Pet.java | 6 +----- .../java/io/swagger/client/model/Tag.java | 2 +- .../java/io/swagger/client/model/User.java | 2 +- 19 files changed, 42 insertions(+), 48 deletions(-) diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java index cfb992970606..4734b5d50771 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java @@ -43,7 +43,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class ApiClient { private Map hostMap = new HashMap(); private Map defaultHeaderMap = new HashMap(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java index 8e9def843a65..7c505d33b96b 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java index b6e962cc98e1..f678452b1a07 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java index 6b6b9ef9bf9f..0ba2992593a0 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.datatype.joda.*; import java.io.IOException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class JSON { private ObjectMapper mapper; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java index 9ffc6692d1e4..a8337005dec7 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java index 20c25650bd3b..ac7d51e2497c 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java index aeee64d1d6e3..f2f9d8a31cc2 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/TypeRef.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class TypeRef { private final Type type; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java index 28231c10803c..698ba3dfa19e 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java @@ -6,16 +6,18 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.Pet; -import java.io.File; +import io.swagger.client.model.*; import java.util.*; -<<<<<<< HEAD -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") -======= -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-16T10:40:45.419+08:00") ->>>>>>> master +import io.swagger.client.model.Pet; +import java.io.File; + +import java.io.File; +import java.util.Map; +import java.util.HashMap; + +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class PetApi { private ApiClient apiClient; @@ -241,11 +243,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); -<<<<<<< HEAD String[] authNames = new String[] { "api_key", "petstore_auth" }; -======= - String[] authNames = new String[] { "api_key" }; ->>>>>>> master TypeRef returnType = new TypeRef() {}; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java index 7fd5fdb57fbf..b2392910993e 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java @@ -6,16 +6,18 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import java.util.Map; -import io.swagger.client.model.Order; +import io.swagger.client.model.*; import java.util.*; -<<<<<<< HEAD -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") -======= -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-09T21:30:19.416+08:00") ->>>>>>> master +import java.util.Map; +import io.swagger.client.model.Order; + +import java.io.File; +import java.util.Map; +import java.util.HashMap; + +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java index 38e2e777ad50..b5ef542f8765 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java @@ -6,16 +6,18 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; +import io.swagger.client.model.*; + +import java.util.*; + import io.swagger.client.model.User; import java.util.*; -import java.util.*; +import java.io.File; +import java.util.Map; +import java.util.HashMap; -<<<<<<< HEAD -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") -======= -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-09T21:30:19.416+08:00") ->>>>>>> master +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index f1f75071071d..60f3aa7c5b50 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java index 19fac68bf039..ff1fc7320152 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/Authentication.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index afe15d727161..f3b643a7839f 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -8,7 +8,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java index b28f17491a02..e3ec46f0b811 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class OAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java index 50d3c6a110fa..1e5b0410731c 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class Category { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java index 118292a05790..3239bdd4faf2 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java @@ -10,11 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -<<<<<<< HEAD -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") -======= -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-09T21:30:19.416+08:00") ->>>>>>> master +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class Order { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java index bd041661bb02..2840137e85dd 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java @@ -12,11 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -<<<<<<< HEAD -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") -======= -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-09T21:30:19.416+08:00") ->>>>>>> master +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class Pet { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java index 689ac04ab45a..e71aacd8011d 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class Tag { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java index a7adbddf79bf..2f35e770e038 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:20.646-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") public class User { private Long id = null; From 7f5cdba6060049b64275fb9f65989a2fcf560d10 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 11:42:40 -0700 Subject: [PATCH 41/78] rebuilt --- .../petstore/java/okhttp-gson/build.gradle | 102 ++++-------------- .../java/io/swagger/client/ApiException.java | 2 +- .../java/io/swagger/client/Configuration.java | 2 +- .../src/main/java/io/swagger/client/Pair.java | 2 +- .../java/io/swagger/client/StringUtil.java | 2 +- .../java/io/swagger/client/api/PetApi.java | 15 +-- .../java/io/swagger/client/api/StoreApi.java | 11 +- .../java/io/swagger/client/api/UserApi.java | 11 +- .../io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../swagger/client/auth/Authentication.java | 2 +- .../java/io/swagger/client/auth/OAuth.java | 2 +- .../java/io/swagger/client/StringUtil.java | 6 +- .../java/io/swagger/client/api/PetApi.java | 69 ++++++------ .../java/io/swagger/client/api/StoreApi.java | 37 ++++--- .../java/io/swagger/client/api/UserApi.java | 69 ++++++------ 15 files changed, 140 insertions(+), 194 deletions(-) diff --git a/samples/client/petstore/java/okhttp-gson/build.gradle b/samples/client/petstore/java/okhttp-gson/build.gradle index eea46b819d02..ada6a992573a 100644 --- a/samples/client/petstore/java/okhttp-gson/build.gradle +++ b/samples/client/petstore/java/okhttp-gson/build.gradle @@ -1,89 +1,11 @@ -group = 'io.swagger' -version = '1.0.0' +apply plugin: 'java' +apply plugin: 'maven' -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:1.2.2' - classpath 'com.github.dcendents:android-maven-plugin:1.2' - } -} +sourceCompatibility = JavaVersion.VERSION_1_7 +targetCompatibility = JavaVersion.VERSION_1_7 repositories { - jcenter() -} - - -if(hasProperty('target') && target == 'android') { - - apply plugin: 'com.android.library' - apply plugin: 'com.github.dcendents.android-maven' - - android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' - defaultConfig { - minSdkVersion 14 - targetSdkVersion 22 - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - // Rename the aar correctly - libraryVariants.all { variant -> - variant.outputs.each { output -> - def outputFile = output.outputFile - if (outputFile != null && outputFile.name.endsWith('.aar')) { - def fileName = "${project.name}-${variant.baseName}-${version}.aar" - output.outputFile = new File(outputFile.parent, fileName) - } - } - } - } - - afterEvaluate { - android.libraryVariants.all { variant -> - def task = project.tasks.create "jar${variant.name.capitalize()}", Jar - task.description = "Create jar artifact for ${variant.name}" - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - task.destinationDir = project.file("${project.buildDir}/outputs/jar") - task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" - artifacts.add('archives', task); - } - } - - task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' - } - - artifacts { - archives sourcesJar - } - -} else { - - apply plugin: 'java' - apply plugin: 'maven' - - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - - install { - repositories.mavenInstaller { - pom.artifactId = 'swagger-petstore-okhttp-gson' - } - } - - task execute(type:JavaExec) { - main = System.getProperty('mainClass') - classpath = sourceSets.main.runtimeClasspath - } + mavenCentral() } dependencies { @@ -93,3 +15,17 @@ dependencies { compile 'com.brsanthu:migbase64:2.2' testCompile 'junit:junit:4.8.1' } + +group = 'io.swagger' +version = '1.0.0' + +install { + repositories.mavenInstaller { + pom.artifactId = 'swagger-petstore-okhttp-gson' + } +} + +task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath +} diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java index 35b795415ba5..0bdd5bd17c69 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java index 56e80e3e519e..a63382fc05be 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java index 3cd335b01c9a..533d318cb5c1 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java index a89da8ce563b..42d453c31efc 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java index 20d4aa85a23e..ff6a1e9b5583 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java @@ -6,15 +6,22 @@ import io.swagger.client.ApiException; import io.swagger.client.Configuration; import io.swagger.client.Pair; +import io.swagger.client.model.*; + import com.google.gson.reflect.TypeToken; import com.squareup.okhttp.Call; +import java.lang.reflect.Type; + +import java.util.*; + import io.swagger.client.model.Pet; import java.io.File; -import java.lang.reflect.Type; -import java.util.*; +import java.io.File; +import java.util.Map; +import java.util.HashMap; public class PetApi { private ApiClient apiClient; @@ -290,11 +297,7 @@ public class PetApi { final String contentType = apiClient.selectHeaderContentType(contentTypes); headerParams.put("Content-Type", contentType); -<<<<<<< HEAD String[] authNames = new String[] { "api_key", "petstore_auth" }; -======= - String[] authNames = new String[] { "api_key" }; ->>>>>>> master return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java index cb780538e18d..a3fb14bb5210 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java @@ -6,15 +6,22 @@ import io.swagger.client.ApiException; import io.swagger.client.Configuration; import io.swagger.client.Pair; +import io.swagger.client.model.*; + import com.google.gson.reflect.TypeToken; import com.squareup.okhttp.Call; +import java.lang.reflect.Type; + +import java.util.*; + import java.util.Map; import io.swagger.client.model.Order; -import java.lang.reflect.Type; -import java.util.*; +import java.io.File; +import java.util.Map; +import java.util.HashMap; public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java index a04470b3b405..ce1bae64a46e 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java @@ -6,15 +6,22 @@ import io.swagger.client.ApiException; import io.swagger.client.Configuration; import io.swagger.client.Pair; +import io.swagger.client.model.*; + import com.google.gson.reflect.TypeToken; import com.squareup.okhttp.Call; +import java.lang.reflect.Type; + +import java.util.*; + import io.swagger.client.model.User; import java.util.*; -import java.lang.reflect.Type; -import java.util.*; +import java.io.File; +import java.util.Map; +import java.util.HashMap; public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 841d912c400f..c072321f457f 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java index 4e22317fce31..18ca4080c2e6 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/Authentication.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java index b2a81e11c0d6..dfa751840141 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:21.445-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") public class OAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java index 3dccfe0b9ad7..2f6d6fed42c3 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/StringUtil.java @@ -1,10 +1,6 @@ package io.swagger.client; -<<<<<<< HEAD -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-19T23:12:22.261-07:00") -======= -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-11T00:10:38.251+02:00") ->>>>>>> master +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:31.307-07:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/PetApi.java index 1746009aa777..cd4dbe866a51 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/PetApi.java @@ -1,16 +1,15 @@ package io.swagger.client.api; -import io.swagger.client.CollectionFormats.*; +import io.swagger.client.model.*; import retrofit.Callback; import retrofit.http.*; import retrofit.mime.*; +import java.util.*; import io.swagger.client.model.Pet; import java.io.File; -import java.util.*; - public interface PetApi { /** @@ -21,7 +20,7 @@ public interface PetApi { * @return Void */ - @PUT("/pet") + @PUT("/pet") Void updatePet( @Body Pet body ); @@ -30,14 +29,14 @@ public interface PetApi { * Update an existing pet * Async method * @param body Pet object that needs to be added to the store - * @param cb callback method + * @param cb callback method * @return void */ - @PUT("/pet") + @PUT("/pet") void updatePet( @Body Pet body, Callback cb - ); + ); /** * Add a new pet to the store @@ -47,7 +46,7 @@ public interface PetApi { * @return Void */ - @POST("/pet") + @POST("/pet") Void addPet( @Body Pet body ); @@ -56,14 +55,14 @@ public interface PetApi { * Add a new pet to the store * Async method * @param body Pet object that needs to be added to the store - * @param cb callback method + * @param cb callback method * @return void */ - @POST("/pet") + @POST("/pet") void addPet( @Body Pet body, Callback cb - ); + ); /** * Finds Pets by status @@ -73,7 +72,7 @@ public interface PetApi { * @return List */ - @GET("/pet/findByStatus") + @GET("/pet/findByStatus") List findPetsByStatus( @Query("status") List status ); @@ -82,14 +81,14 @@ public interface PetApi { * Finds Pets by status * Async method * @param status Status values that need to be considered for filter - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/pet/findByStatus") + @GET("/pet/findByStatus") void findPetsByStatus( @Query("status") List status, Callback> cb - ); + ); /** * Finds Pets by tags @@ -99,7 +98,7 @@ public interface PetApi { * @return List */ - @GET("/pet/findByTags") + @GET("/pet/findByTags") List findPetsByTags( @Query("tags") List tags ); @@ -108,14 +107,14 @@ public interface PetApi { * Finds Pets by tags * Async method * @param tags Tags to filter by - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/pet/findByTags") + @GET("/pet/findByTags") void findPetsByTags( @Query("tags") List tags, Callback> cb - ); + ); /** * Find pet by ID @@ -125,7 +124,7 @@ public interface PetApi { * @return Pet */ - @GET("/pet/{petId}") + @GET("/pet/{petId}") Pet getPetById( @Path("petId") Long petId ); @@ -134,14 +133,14 @@ public interface PetApi { * Find pet by ID * Async method * @param petId ID of pet that needs to be fetched - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/pet/{petId}") + @GET("/pet/{petId}") void getPetById( @Path("petId") Long petId, Callback cb - ); + ); /** * Updates a pet in the store with form data @@ -154,7 +153,7 @@ public interface PetApi { */ @FormUrlEncoded - @POST("/pet/{petId}") + @POST("/pet/{petId}") Void updatePetWithForm( @Path("petId") String petId, @Field("name") String name, @Field("status") String status ); @@ -165,15 +164,15 @@ public interface PetApi { * @param petId ID of pet that needs to be updated * @param name Updated name of the pet * @param status Updated status of the pet - * @param cb callback method + * @param cb callback method * @return void */ @FormUrlEncoded - @POST("/pet/{petId}") + @POST("/pet/{petId}") void updatePetWithForm( @Path("petId") String petId, @Field("name") String name, @Field("status") String status, Callback cb - ); + ); /** * Deletes a pet @@ -184,7 +183,7 @@ public interface PetApi { * @return Void */ - @DELETE("/pet/{petId}") + @DELETE("/pet/{petId}") Void deletePet( @Path("petId") Long petId, @Header("api_key") String apiKey ); @@ -194,14 +193,14 @@ public interface PetApi { * Async method * @param petId Pet id to delete * @param apiKey - * @param cb callback method + * @param cb callback method * @return void */ - @DELETE("/pet/{petId}") + @DELETE("/pet/{petId}") void deletePet( @Path("petId") Long petId, @Header("api_key") String apiKey, Callback cb - ); + ); /** * uploads an image @@ -214,7 +213,7 @@ public interface PetApi { */ @Multipart - @POST("/pet/{petId}/uploadImage") + @POST("/pet/{petId}/uploadImage") Void uploadFile( @Path("petId") Long petId, @Part("additionalMetadata") String additionalMetadata, @Part("file") TypedFile file ); @@ -225,14 +224,14 @@ public interface PetApi { * @param petId ID of pet to update * @param additionalMetadata Additional data to pass to server * @param file file to upload - * @param cb callback method + * @param cb callback method * @return void */ @Multipart - @POST("/pet/{petId}/uploadImage") + @POST("/pet/{petId}/uploadImage") void uploadFile( @Path("petId") Long petId, @Part("additionalMetadata") String additionalMetadata, @Part("file") TypedFile file, Callback cb - ); + ); } diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/StoreApi.java index 4d6d3aa7c00c..1c0a8291d020 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/StoreApi.java @@ -1,16 +1,15 @@ package io.swagger.client.api; -import io.swagger.client.CollectionFormats.*; +import io.swagger.client.model.*; import retrofit.Callback; import retrofit.http.*; import retrofit.mime.*; +import java.util.*; import java.util.Map; import io.swagger.client.model.Order; -import java.util.*; - public interface StoreApi { /** @@ -20,21 +19,21 @@ public interface StoreApi { * @return Map */ - @GET("/store/inventory") + @GET("/store/inventory") Map getInventory(); /** * Returns pet inventories by status * Async method - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/store/inventory") + @GET("/store/inventory") void getInventory( Callback> cb - ); + ); /** * Place an order for a pet @@ -44,7 +43,7 @@ public interface StoreApi { * @return Order */ - @POST("/store/order") + @POST("/store/order") Order placeOrder( @Body Order body ); @@ -53,14 +52,14 @@ public interface StoreApi { * Place an order for a pet * Async method * @param body order placed for purchasing the pet - * @param cb callback method + * @param cb callback method * @return void */ - @POST("/store/order") + @POST("/store/order") void placeOrder( @Body Order body, Callback cb - ); + ); /** * Find purchase order by ID @@ -70,7 +69,7 @@ public interface StoreApi { * @return Order */ - @GET("/store/order/{orderId}") + @GET("/store/order/{orderId}") Order getOrderById( @Path("orderId") String orderId ); @@ -79,14 +78,14 @@ public interface StoreApi { * Find purchase order by ID * Async method * @param orderId ID of pet that needs to be fetched - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/store/order/{orderId}") + @GET("/store/order/{orderId}") void getOrderById( @Path("orderId") String orderId, Callback cb - ); + ); /** * Delete purchase order by ID @@ -96,7 +95,7 @@ public interface StoreApi { * @return Void */ - @DELETE("/store/order/{orderId}") + @DELETE("/store/order/{orderId}") Void deleteOrder( @Path("orderId") String orderId ); @@ -105,13 +104,13 @@ public interface StoreApi { * Delete purchase order by ID * Async method * @param orderId ID of the order that needs to be deleted - * @param cb callback method + * @param cb callback method * @return void */ - @DELETE("/store/order/{orderId}") + @DELETE("/store/order/{orderId}") void deleteOrder( @Path("orderId") String orderId, Callback cb - ); + ); } diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/UserApi.java index ff4b45629779..162222bc0f1b 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/api/UserApi.java @@ -1,14 +1,13 @@ package io.swagger.client.api; -import io.swagger.client.CollectionFormats.*; +import io.swagger.client.model.*; import retrofit.Callback; import retrofit.http.*; import retrofit.mime.*; - -import io.swagger.client.model.User; import java.util.*; +import io.swagger.client.model.User; import java.util.*; public interface UserApi { @@ -21,7 +20,7 @@ public interface UserApi { * @return Void */ - @POST("/user") + @POST("/user") Void createUser( @Body User body ); @@ -30,14 +29,14 @@ public interface UserApi { * Create user * Async method * @param body Created user object - * @param cb callback method + * @param cb callback method * @return void */ - @POST("/user") + @POST("/user") void createUser( @Body User body, Callback cb - ); + ); /** * Creates list of users with given input array @@ -47,7 +46,7 @@ public interface UserApi { * @return Void */ - @POST("/user/createWithArray") + @POST("/user/createWithArray") Void createUsersWithArrayInput( @Body List body ); @@ -56,14 +55,14 @@ public interface UserApi { * Creates list of users with given input array * Async method * @param body List of user object - * @param cb callback method + * @param cb callback method * @return void */ - @POST("/user/createWithArray") + @POST("/user/createWithArray") void createUsersWithArrayInput( @Body List body, Callback cb - ); + ); /** * Creates list of users with given input array @@ -73,7 +72,7 @@ public interface UserApi { * @return Void */ - @POST("/user/createWithList") + @POST("/user/createWithList") Void createUsersWithListInput( @Body List body ); @@ -82,14 +81,14 @@ public interface UserApi { * Creates list of users with given input array * Async method * @param body List of user object - * @param cb callback method + * @param cb callback method * @return void */ - @POST("/user/createWithList") + @POST("/user/createWithList") void createUsersWithListInput( @Body List body, Callback cb - ); + ); /** * Logs user into the system @@ -100,7 +99,7 @@ public interface UserApi { * @return String */ - @GET("/user/login") + @GET("/user/login") String loginUser( @Query("username") String username, @Query("password") String password ); @@ -110,14 +109,14 @@ public interface UserApi { * Async method * @param username The user name for login * @param password The password for login in clear text - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/user/login") + @GET("/user/login") void loginUser( @Query("username") String username, @Query("password") String password, Callback cb - ); + ); /** * Logs out current logged in user session @@ -126,21 +125,21 @@ public interface UserApi { * @return Void */ - @GET("/user/logout") + @GET("/user/logout") Void logoutUser(); /** * Logs out current logged in user session * Async method - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/user/logout") + @GET("/user/logout") void logoutUser( Callback cb - ); + ); /** * Get user by user name @@ -150,7 +149,7 @@ public interface UserApi { * @return User */ - @GET("/user/{username}") + @GET("/user/{username}") User getUserByName( @Path("username") String username ); @@ -159,14 +158,14 @@ public interface UserApi { * Get user by user name * Async method * @param username The name that needs to be fetched. Use user1 for testing. - * @param cb callback method + * @param cb callback method * @return void */ - @GET("/user/{username}") + @GET("/user/{username}") void getUserByName( @Path("username") String username, Callback cb - ); + ); /** * Updated user @@ -177,7 +176,7 @@ public interface UserApi { * @return Void */ - @PUT("/user/{username}") + @PUT("/user/{username}") Void updateUser( @Path("username") String username, @Body User body ); @@ -187,14 +186,14 @@ public interface UserApi { * Async method * @param username name that need to be deleted * @param body Updated user object - * @param cb callback method + * @param cb callback method * @return void */ - @PUT("/user/{username}") + @PUT("/user/{username}") void updateUser( @Path("username") String username, @Body User body, Callback cb - ); + ); /** * Delete user @@ -204,7 +203,7 @@ public interface UserApi { * @return Void */ - @DELETE("/user/{username}") + @DELETE("/user/{username}") Void deleteUser( @Path("username") String username ); @@ -213,13 +212,13 @@ public interface UserApi { * Delete user * Async method * @param username The name that needs to be deleted - * @param cb callback method + * @param cb callback method * @return void */ - @DELETE("/user/{username}") + @DELETE("/user/{username}") void deleteUser( @Path("username") String username, Callback cb - ); + ); } From 214e0186e8b77fc35da30e9357c0b270b8f7c5bb Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 21 Oct 2015 12:05:27 +0800 Subject: [PATCH 42/78] Ignore null fields in model serialization in Java clients. Closes #1413 --- .../src/main/resources/Java/JSON.mustache | 3 ++- .../Java/libraries/okhttp-gson/JSON.mustache | 3 +-- .../src/main/java/io/swagger/client/JSON.java | 5 +++-- .../src/main/java/io/swagger/client/api/PetApi.java | 12 +++--------- .../main/java/io/swagger/client/api/StoreApi.java | 10 ++-------- .../main/java/io/swagger/client/api/UserApi.java | 10 ++-------- .../src/main/java/io/swagger/client/JSON.java | 5 +++-- .../src/main/java/io/swagger/client/api/PetApi.java | 12 +++--------- .../main/java/io/swagger/client/api/StoreApi.java | 10 ++-------- .../main/java/io/swagger/client/api/UserApi.java | 10 ++-------- .../src/main/java/io/swagger/client/JSON.java | 3 +-- .../src/main/java/io/swagger/client/api/PetApi.java | 13 +++---------- .../main/java/io/swagger/client/api/StoreApi.java | 11 ++--------- .../main/java/io/swagger/client/api/UserApi.java | 11 ++--------- 14 files changed, 31 insertions(+), 87 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/JSON.mustache b/modules/swagger-codegen/src/main/resources/Java/JSON.mustache index 7689856f5de5..43b38f6e21d3 100644 --- a/modules/swagger-codegen/src/main/resources/Java/JSON.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/JSON.mustache @@ -12,12 +12,13 @@ public class JSON { public JSON() { mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); mapper.registerModule(new JodaModule()); - } + } /** * Serialize the given Java object into JSON string. diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/JSON.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/JSON.mustache index 10a43d97de07..9cc1324acb62 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/JSON.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/JSON.mustache @@ -23,10 +23,9 @@ public class JSON { public JSON(ApiClient apiClient) { this.apiClient = apiClient; gson = new GsonBuilder() - .serializeNulls() .registerTypeAdapter(Date.class, new DateAdapter(apiClient)) .create(); - } + } public Gson getGson() { return gson; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java index 3e15ec01d3bc..1986a6badbf5 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/JSON.java @@ -6,18 +6,19 @@ import com.fasterxml.jackson.datatype.joda.*; import java.io.IOException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T10:56:59.550-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:29.717+08:00") public class JSON { private ObjectMapper mapper; public JSON() { mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); mapper.registerModule(new JodaModule()); - } + } /** * Serialize the given Java object into JSON string. diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index 2c7d0be82791..23782e03e72d 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -6,18 +6,12 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.*; - -import java.util.*; - import io.swagger.client.model.Pet; import java.io.File; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T10:56:59.550-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:29.717+08:00") public class PetApi { private ApiClient apiClient; @@ -272,7 +266,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "api_key", "petstore_auth" }; + String[] authNames = new String[] { "api_key" }; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java index 8cb88dfcd316..f8c0fc58682a 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java @@ -6,18 +6,12 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.*; - -import java.util.*; - import java.util.Map; import io.swagger.client.model.Order; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T10:56:59.550-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:29.717+08:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java index 8db3eaffacc4..f6ab0ae08143 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java @@ -6,18 +6,12 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.*; - -import java.util.*; - import io.swagger.client.model.User; import java.util.*; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T10:56:59.550-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:29.717+08:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java index 0ba2992593a0..8ce930ce5c1e 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java @@ -6,18 +6,19 @@ import com.fasterxml.jackson.datatype.joda.*; import java.io.IOException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:20.020+08:00") public class JSON { private ObjectMapper mapper; public JSON() { mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); mapper.registerModule(new JodaModule()); - } + } /** * Serialize the given Java object into JSON string. diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java index 698ba3dfa19e..57c087a7b5fc 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java @@ -6,18 +6,12 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.*; - -import java.util.*; - import io.swagger.client.model.Pet; import java.io.File; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:20.020+08:00") public class PetApi { private ApiClient apiClient; @@ -243,7 +237,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "api_key", "petstore_auth" }; + String[] authNames = new String[] { "api_key" }; TypeRef returnType = new TypeRef() {}; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java index b2392910993e..b035cde9658a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java @@ -6,18 +6,12 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.*; - -import java.util.*; - import java.util.Map; import io.swagger.client.model.Order; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:20.020+08:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java index b5ef542f8765..51bac269b535 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java @@ -6,18 +6,12 @@ import io.swagger.client.Configuration; import io.swagger.client.Pair; import io.swagger.client.TypeRef; -import io.swagger.client.model.*; - -import java.util.*; - import io.swagger.client.model.User; import java.util.*; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:29:47.599-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-21T11:55:20.020+08:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/JSON.java index f88639b9c82d..d9d0881a153e 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/JSON.java @@ -23,10 +23,9 @@ public class JSON { public JSON(ApiClient apiClient) { this.apiClient = apiClient; gson = new GsonBuilder() - .serializeNulls() .registerTypeAdapter(Date.class, new DateAdapter(apiClient)) .create(); - } + } public Gson getGson() { return gson; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java index ff6a1e9b5583..39154cf855eb 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java @@ -6,22 +6,15 @@ import io.swagger.client.ApiException; import io.swagger.client.Configuration; import io.swagger.client.Pair; -import io.swagger.client.model.*; - import com.google.gson.reflect.TypeToken; import com.squareup.okhttp.Call; -import java.lang.reflect.Type; - -import java.util.*; - import io.swagger.client.model.Pet; import java.io.File; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.lang.reflect.Type; +import java.util.*; public class PetApi { private ApiClient apiClient; @@ -297,7 +290,7 @@ public class PetApi { final String contentType = apiClient.selectHeaderContentType(contentTypes); headerParams.put("Content-Type", contentType); - String[] authNames = new String[] { "api_key", "petstore_auth" }; + String[] authNames = new String[] { "api_key" }; return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java index a3fb14bb5210..cb780538e18d 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java @@ -6,22 +6,15 @@ import io.swagger.client.ApiException; import io.swagger.client.Configuration; import io.swagger.client.Pair; -import io.swagger.client.model.*; - import com.google.gson.reflect.TypeToken; import com.squareup.okhttp.Call; -import java.lang.reflect.Type; - -import java.util.*; - import java.util.Map; import io.swagger.client.model.Order; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.lang.reflect.Type; +import java.util.*; public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java index ce1bae64a46e..a04470b3b405 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/UserApi.java @@ -6,22 +6,15 @@ import io.swagger.client.ApiException; import io.swagger.client.Configuration; import io.swagger.client.Pair; -import io.swagger.client.model.*; - import com.google.gson.reflect.TypeToken; import com.squareup.okhttp.Call; -import java.lang.reflect.Type; - -import java.util.*; - import io.swagger.client.model.User; import java.util.*; -import java.io.File; -import java.util.Map; -import java.util.HashMap; +import java.lang.reflect.Type; +import java.util.*; public class UserApi { private ApiClient apiClient; From 568a7be994e586b10a6292ff312eb7b1f7f91480 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 21:25:21 -0700 Subject: [PATCH 43/78] enabled https --- .../src/main/java/io/swagger/generator/Bootstrap.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java b/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java index a81113ab76a1..a13995505c7c 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/Bootstrap.java @@ -49,6 +49,8 @@ public class Bootstrap extends HttpServlet { bc.setVersion("0.0.0"); } } + + bc.setSchemes(new String[]{"https"}); bc.setHost("generator.swagger.io"); bc.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); bc.setResourcePackage("io.swagger.generator.resource"); From e9aaa6da3658bf6d45e16a5a54f003e441736a59 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 21:25:35 -0700 Subject: [PATCH 44/78] enabled https --- modules/swagger-generator/src/main/webapp/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-generator/src/main/webapp/index.html b/modules/swagger-generator/src/main/webapp/index.html index 021310d9dec8..5a19fbffa431 100644 --- a/modules/swagger-generator/src/main/webapp/index.html +++ b/modules/swagger-generator/src/main/webapp/index.html @@ -27,7 +27,7 @@ if (url && url.length > 1) { url = decodeURIComponent(url[1]); } else { - url = "http://generator.swagger.io/api/swagger.json"; + url = "https://generator.swagger.io/api/swagger.json"; } window.swaggerUi = new SwaggerUi({ url: url, From dcc47a92b5df428efadae3ecd0e613ac45a69a89 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 20 Oct 2015 21:25:51 -0700 Subject: [PATCH 45/78] added https support --- .../generator/resource/SwaggerResource.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java index ddfd6fa39502..fa6a4785c5b9 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java @@ -21,10 +21,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Path("/gen") @Api(value = "/gen", description = "Resource for generating swagger components") @@ -68,8 +65,17 @@ public class SwaggerResource { @ApiParam(value = "Configuration for building the client library", required = true) GeneratorInput opts) throws Exception { String filename = Generator.generateClient(language, opts); + String scheme = request.getHeader("X-SSL"); + String port = ""; + if("1".equals(scheme)) { + scheme = "https"; + } + else { + scheme = request.getScheme(); + port = ":" + request.getServerPort(); + } - String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); + String host = scheme + "://" + request.getServerName() + port; if (filename != null) { String code = String.valueOf(System.currentTimeMillis()); Generated g = new Generated(); From 9b8a63343533a9a02f93c9dc7d2de39c917c53b5 Mon Sep 17 00:00:00 2001 From: akkie Date: Wed, 21 Oct 2015 12:56:15 +0200 Subject: [PATCH 46/78] ApiException doesn't use deserialized data This is a fix for #1394. I had not merged the data correctly after the rebase --- .../swagger-codegen/src/main/resources/php/ApiClient.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache index e46edda63b77..e2193b1d754f 100644 --- a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache @@ -246,7 +246,7 @@ class ApiClient throw new ApiException( "[".$response_info['http_code']."] Error connecting to the API ($url)", - $response_info['http_code'], $http_header, $http_body + $response_info['http_code'], $http_header, $data ); } return array($data, $http_header); From 57e3ea3e9c33aee5d5fdc8364198843d44b84653 Mon Sep 17 00:00:00 2001 From: Ampem Darko Date: Wed, 21 Oct 2015 13:35:48 +0000 Subject: [PATCH 47/78] Ensure parameters to "each" is a hash in TO_JSON and from_hash --- .../petstore/perl/lib/WWW/SwaggerClient/Object/BaseObject.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Object/BaseObject.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Object/BaseObject.pm index 12088eb56cd5..af1ac1c60174 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Object/BaseObject.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Object/BaseObject.pm @@ -28,7 +28,7 @@ sub to_hash { sub TO_JSON { my $self = shift; my $_data = {}; - foreach my $_key (keys $self->get_attribute_map) { + foreach my $_key (keys %{$self->get_attribute_map}) { if (defined $self->{$_key}) { $_data->{$self->get_attribute_map->{$_key}} = $self->{$_key}; } @@ -40,7 +40,7 @@ sub TO_JSON { sub from_hash { my ($self, $hash) = @_; # loop through attributes and use swagger_types to deserialize the data - while ( my ($_key, $_type) = each $self->get_swagger_types ) { + while ( my ($_key, $_type) = each %{$self->get_swagger_types} ) { if ($_type =~ /^array\[/i) { # array my $_subclass = substr($_type, 6, -1); my @_array = (); From 1ac6842b5a52881a6a9a660670c1f67204816300 Mon Sep 17 00:00:00 2001 From: Ampem Darko Date: Wed, 21 Oct 2015 16:15:42 +0000 Subject: [PATCH 48/78] Update mustache template to pass hashes in TO_JSON and from_hash --- .../src/main/resources/perl/BaseObject.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/perl/BaseObject.mustache b/modules/swagger-codegen/src/main/resources/perl/BaseObject.mustache index f3fca3f41a75..e740ea593ab0 100644 --- a/modules/swagger-codegen/src/main/resources/perl/BaseObject.mustache +++ b/modules/swagger-codegen/src/main/resources/perl/BaseObject.mustache @@ -28,7 +28,7 @@ sub to_hash { sub TO_JSON { my $self = shift; my $_data = {}; - foreach my $_key (keys $self->get_attribute_map) { + foreach my $_key (keys %{$self->get_attribute_map}) { if (defined $self->{$_key}) { $_data->{$self->get_attribute_map->{$_key}} = $self->{$_key}; } @@ -40,7 +40,7 @@ sub TO_JSON { sub from_hash { my ($self, $hash) = @_; # loop through attributes and use swagger_types to deserialize the data - while ( my ($_key, $_type) = each $self->get_swagger_types ) { + while ( my ($_key, $_type) = each %{$self->get_swagger_types} ) { if ($_type =~ /^array\[/i) { # array my $_subclass = substr($_type, 6, -1); my @_array = (); From 390ddc9ef3987722ee17d4b14df5ccded62d8c98 Mon Sep 17 00:00:00 2001 From: David Greenberg Date: Tue, 20 Oct 2015 09:20:35 -0400 Subject: [PATCH 49/78] Changing Stream deserialization to use raw bytes from response, rather than UTF-8 decoded text. --- .../main/resources/csharp/ApiClient.mustache | 27 ++++++++++--------- .../src/main/resources/csharp/api.mustache | 4 +-- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index ae864113a9c5..f6dd29333316 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -214,12 +214,14 @@ namespace {{packageName}}.Client /// /// Deserialize the JSON string into a proper object. /// - /// HTTP body (e.g. string, JSON). + /// The HTTP response. /// Object type. - /// /// Object representation of the JSON string. - public object Deserialize(string content, Type type, IList headers=null) + public object Deserialize(IRestResponse response, Type type) { + byte[] data = response.RawBytes; + string content = response.Content; + IList headers = response.Headers; if (type == typeof(Object)) // return an object { return content; @@ -227,21 +229,22 @@ namespace {{packageName}}.Client if (type == typeof(Stream)) { - var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath) - ? Path.GetTempPath() - : Configuration.TempFolderPath; - - var fileName = filePath + Guid.NewGuid(); if (headers != null) { + var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath) + ? Path.GetTempPath() + : Configuration.TempFolderPath; var regex = new Regex(@"Content-Disposition:.*filename=['""]?([^'""\s]+)['""]?$"); var match = regex.Match(headers.ToString()); if (match.Success) - fileName = filePath + match.Value.Replace("\"", "").Replace("'", ""); + { + string fileName = filePath + match.Value.Replace("\"", "").Replace("'", ""); + File.WriteAllBytes(fileName, data); + return new FileStream(fileName, FileMode.Open); + } } - File.WriteAllText(fileName, content); - return new FileStream(fileName, FileMode.Open); - + var stream = new MemoryStream(data); + return stream; } if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object diff --git a/modules/swagger-codegen/src/main/resources/csharp/api.mustache b/modules/swagger-codegen/src/main/resources/csharp/api.mustache index f54f42d2eca6..89594091dfbc 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/api.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/api.mustache @@ -144,7 +144,7 @@ namespace {{packageName}}.Api else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.ErrorMessage, response.ErrorMessage); - {{#returnType}}return ({{{returnType}}}) ApiClient.Deserialize(response.Content, typeof({{{returnType}}}), response.Headers);{{/returnType}}{{^returnType}}return;{{/returnType}} + {{#returnType}}return ({{{returnType}}}) ApiClient.Deserialize(response, typeof({{{returnType}}}));{{/returnType}}{{^returnType}}return;{{/returnType}} } /// @@ -197,7 +197,7 @@ namespace {{packageName}}.Api if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content); - {{#returnType}}return ({{{returnType}}}) ApiClient.Deserialize(response.Content, typeof({{{returnType}}}), response.Headers);{{/returnType}}{{^returnType}} + {{#returnType}}return ({{{returnType}}}) ApiClient.Deserialize(response, typeof({{{returnType}}}));{{/returnType}}{{^returnType}} return;{{/returnType}} } {{/operation}} From 2fcb705826d631e802686b7416e57eb231652a62 Mon Sep 17 00:00:00 2001 From: Cristian Trifan Date: Thu, 22 Oct 2015 23:19:46 +0300 Subject: [PATCH 50/78] Update TypeScriptAngularClientCodegen.java Fix minor typo --- .../codegen/languages/TypeScriptAngularClientCodegen.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 8eec2b8772e8..d145760d2cc9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -1,7 +1,6 @@ package io.swagger.codegen.languages; import io.swagger.codegen.SupportingFile; - import java.io.File; public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCodegen { @@ -12,7 +11,7 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode } public String getHelp() { - return "Generates a TypeScript AngurlarJS client library."; + return "Generates a TypeScript AngularJS client library."; } public TypeScriptAngularClientCodegen() { @@ -25,4 +24,4 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode modelPackage = "API.Client"; supportingFiles.add(new SupportingFile("api.d.mustache", apiPackage().replace('.', File.separatorChar), "api.d.ts")); } -} \ No newline at end of file +} From 723cf9b823c444ce95dc245cd56818fde84b55b5 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 14:03:44 -0700 Subject: [PATCH 51/78] made selective generation of models --- .../io/swagger/codegen/DefaultGenerator.java | 306 ++++++++++-------- 1 file changed, 164 insertions(+), 142 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index d240d43d92d9..f72d1acaa2a8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -29,16 +29,7 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; public class DefaultGenerator extends AbstractGenerator implements Generator { Logger LOGGER = LoggerFactory.getLogger(DefaultGenerator.class); @@ -60,6 +51,22 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { @Override public List generate() { + boolean generateApis = true; + boolean generateModels = true; + boolean generateSupportingFiles = true; + + Set modelsToGenerate = null; + + // allows generating only models by specifying a CSV of models to generate, or empty for all + if(System.getProperty("models") != null) { + generateApis = false; + generateSupportingFiles = false; + String modelNames = System.getProperty("models"); + if(!modelNames.isEmpty()) { + modelsToGenerate = new HashSet(Arrays.asList(modelNames.split(","))); + } + } + if (swagger == null || config == null) { throw new RuntimeException("missing swagger input or config!"); } @@ -139,28 +146,97 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { if (definitions != null) { List sortedModelKeys = sortModelsByInheritance(definitions); - for (String name : sortedModelKeys) { - try { - - //dont generate models that have an import mapping - if(config.importMapping().containsKey(name)) { - continue; + if(generateModels) { + if(modelsToGenerate != null) { + List updatedKeys = new ArrayList(); + for(String m : sortedModelKeys) { + if(modelsToGenerate.contains(m)) { + updatedKeys.add(m); + } } + sortedModelKeys = updatedKeys; + } - Model model = definitions.get(name); - Map modelMap = new HashMap(); - modelMap.put(name, model); - Map models = processModels(config, modelMap, definitions); - models.putAll(config.additionalProperties()); - - allModels.add(((List) models.get("models")).get(0)); - - for (String templateName : config.modelTemplateFiles().keySet()) { - String suffix = config.modelTemplateFiles().get(templateName); - String filename = config.modelFileFolder() + File.separator + config.toModelFilename(name) + suffix; - if (!config.shouldOverwrite(filename)) { + for (String name : sortedModelKeys) { + try { + //don't generate models that have an import mapping + if(config.importMapping().containsKey(name)) { continue; } + + Model model = definitions.get(name); + Map modelMap = new HashMap(); + modelMap.put(name, model); + Map models = processModels(config, modelMap, definitions); + models.putAll(config.additionalProperties()); + + allModels.add(((List) models.get("models")).get(0)); + + for (String templateName : config.modelTemplateFiles().keySet()) { + String suffix = config.modelTemplateFiles().get(templateName); + String filename = config.modelFileFolder() + File.separator + config.toModelFilename(name) + suffix; + if (!config.shouldOverwrite(filename)) { + continue; + } + String templateFile = getFullTemplateFile(config, templateName); + String template = readTemplate(templateFile); + Template tmpl = Mustache.compiler() + .withLoader(new Mustache.TemplateLoader() { + @Override + public Reader getTemplate(String name) { + return getTemplateReader(config.templateDir() + File.separator + name + ".mustache"); + } + }) + .defaultValue("") + .compile(template); + writeToFile(filename, tmpl.execute(models)); + files.add(new File(filename)); + } + } catch (Exception e) { + throw new RuntimeException("Could not generate model '" + name + "'", e); + } + } + } + } + if (System.getProperty("debugModels") != null) { + System.out.println("############ Model info ############"); + Json.prettyPrint(allModels); + } + + // apis + Map> paths = processPaths(swagger.getPaths()); + if(generateApis) { + for (String tag : paths.keySet()) { + try { + List ops = paths.get(tag); + Map operation = processOperations(config, tag, ops); + + operation.put("basePath", basePath); + operation.put("contextPath", contextPath); + operation.put("baseName", tag); + operation.put("modelPackage", config.modelPackage()); + operation.putAll(config.additionalProperties()); + operation.put("classname", config.toApiName(tag)); + operation.put("classVarName", config.toApiVarName(tag)); + operation.put("importPath", config.toApiImport(tag)); + + processMimeTypes(swagger.getConsumes(), operation, "consumes"); + processMimeTypes(swagger.getProduces(), operation, "produces"); + + allOperations.add(new HashMap(operation)); + for (int i = 0; i < allOperations.size(); i++) { + Map oo = (Map) allOperations.get(i); + if (i < (allOperations.size() - 1)) { + oo.put("hasMore", "true"); + } + } + + for (String templateName : config.apiTemplateFiles().keySet()) { + String filename = config.apiFilename(templateName, tag); + if (!config.shouldOverwrite(filename) && new File(filename).exists()) { + continue; + } + String templateFile = getFullTemplateFile(config, templateName); String template = readTemplate(templateFile); Template tmpl = Mustache.compiler() @@ -172,71 +248,15 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { }) .defaultValue("") .compile(template); - writeToFile(filename, tmpl.execute(models)); + + writeToFile(filename, tmpl.execute(operation)); files.add(new File(filename)); } } catch (Exception e) { - throw new RuntimeException("Could not generate model '" + name + "'", e); + throw new RuntimeException("Could not generate api file for '" + tag + "'", e); } } } - if (System.getProperty("debugModels") != null) { - System.out.println("############ Model info ############"); - Json.prettyPrint(allModels); - } - - // apis - Map> paths = processPaths(swagger.getPaths()); - for (String tag : paths.keySet()) { - try { - List ops = paths.get(tag); - Map operation = processOperations(config, tag, ops); - - operation.put("basePath", basePath); - operation.put("contextPath", contextPath); - operation.put("baseName", tag); - operation.put("modelPackage", config.modelPackage()); - operation.putAll(config.additionalProperties()); - operation.put("classname", config.toApiName(tag)); - operation.put("classVarName", config.toApiVarName(tag)); - operation.put("importPath", config.toApiImport(tag)); - - processMimeTypes(swagger.getConsumes(), operation, "consumes"); - processMimeTypes(swagger.getProduces(), operation, "produces"); - - allOperations.add(new HashMap(operation)); - for (int i = 0; i < allOperations.size(); i++) { - Map oo = (Map) allOperations.get(i); - if (i < (allOperations.size() - 1)) { - oo.put("hasMore", "true"); - } - } - - for (String templateName : config.apiTemplateFiles().keySet()) { - String filename = config.apiFilename(templateName, tag); - if (!config.shouldOverwrite(filename) && new File(filename).exists()) { - continue; - } - - String templateFile = getFullTemplateFile(config, templateName); - String template = readTemplate(templateFile); - Template tmpl = Mustache.compiler() - .withLoader(new Mustache.TemplateLoader() { - @Override - public Reader getTemplate(String name) { - return getTemplateReader(config.templateDir() + File.separator + name + ".mustache"); - } - }) - .defaultValue("") - .compile(template); - - writeToFile(filename, tmpl.execute(operation)); - files.add(new File(filename)); - } - } catch (Exception e) { - throw new RuntimeException("Could not generate api file for '" + tag + "'", e); - } - } if (System.getProperty("debugOperations") != null) { System.out.println("############ Operation info ############"); Json.prettyPrint(allOperations); @@ -280,66 +300,68 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { Json.prettyPrint(bundle); } - for (SupportingFile support : config.supportingFiles()) { - try { - String outputFolder = config.outputFolder(); - if (isNotEmpty(support.folder)) { - outputFolder += File.separator + support.folder; - } - File of = new File(outputFolder); - if (!of.isDirectory()) { - of.mkdirs(); - } - String outputFilename = outputFolder + File.separator + support.destinationFilename; - if (!config.shouldOverwrite(outputFilename)) { - continue; - } - - String templateFile = getFullTemplateFile(config, support.templateFile); - - if (templateFile.endsWith("mustache")) { - String template = readTemplate(templateFile); - Template tmpl = Mustache.compiler() - .withLoader(new Mustache.TemplateLoader() { - @Override - public Reader getTemplate(String name) { - return getTemplateReader(config.templateDir() + File.separator + name + ".mustache"); - } - }) - .defaultValue("") - .compile(template); - - writeToFile(outputFilename, tmpl.execute(bundle)); - files.add(new File(outputFilename)); - } else { - InputStream in = null; - - try { - in = new FileInputStream(templateFile); - } catch (Exception e) { - // continue + if(generateSupportingFiles) { + for (SupportingFile support : config.supportingFiles()) { + try { + String outputFolder = config.outputFolder(); + if (isNotEmpty(support.folder)) { + outputFolder += File.separator + support.folder; } - if (in == null) { - in = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(templateFile)); + File of = new File(outputFolder); + if (!of.isDirectory()) { + of.mkdirs(); } - File outputFile = new File(outputFilename); - OutputStream out = new FileOutputStream(outputFile, false); - if (in != null && out != null) { - System.out.println("writing file " + outputFile); - IOUtils.copy(in, out); + String outputFilename = outputFolder + File.separator + support.destinationFilename; + if (!config.shouldOverwrite(outputFilename)) { + continue; + } + + String templateFile = getFullTemplateFile(config, support.templateFile); + + if (templateFile.endsWith("mustache")) { + String template = readTemplate(templateFile); + Template tmpl = Mustache.compiler() + .withLoader(new Mustache.TemplateLoader() { + @Override + public Reader getTemplate(String name) { + return getTemplateReader(config.templateDir() + File.separator + name + ".mustache"); + } + }) + .defaultValue("") + .compile(template); + + writeToFile(outputFilename, tmpl.execute(bundle)); + files.add(new File(outputFilename)); } else { - if (in == null) { - System.out.println("can't open " + templateFile + " for input"); - } - if (out == null) { - System.out.println("can't open " + outputFile + " for output"); - } - } + InputStream in = null; - files.add(outputFile); + try { + in = new FileInputStream(templateFile); + } catch (Exception e) { + // continue + } + if (in == null) { + in = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(templateFile)); + } + File outputFile = new File(outputFilename); + OutputStream out = new FileOutputStream(outputFile, false); + if (in != null && out != null) { + System.out.println("writing file " + outputFile); + IOUtils.copy(in, out); + } else { + if (in == null) { + System.out.println("can't open " + templateFile + " for input"); + } + if (out == null) { + System.out.println("can't open " + outputFile + " for output"); + } + } + + files.add(outputFile); + } + } catch (Exception e) { + throw new RuntimeException("Could not generate supporting file '" + support + "'", e); } - } catch (Exception e) { - throw new RuntimeException("Could not generate supporting file '" + support + "'", e); } } From 9f842a1295b97549eecdce540b8e112a0b993ce3 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 14:34:52 -0700 Subject: [PATCH 52/78] added environment variable support --- .../java/io/swagger/codegen/plugin/CodeGenMojo.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index 21eef59b0104..805afe22a94a 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -36,6 +36,7 @@ import config.Config; import config.ConfigParser; import java.io.File; +import java.util.HashMap; import java.util.Map; import java.util.ServiceLoader; @@ -112,6 +113,9 @@ public class CodeGenMojo extends AbstractMojo { @Parameter(defaultValue = "true") private boolean addCompileSourceRoot = true; + @Parameter + protected Map environmentVariables = new HashMap(); + /** * The project being built. */ @@ -125,6 +129,12 @@ public class CodeGenMojo extends AbstractMojo { CodegenConfig config = CodegenConfigLoader.forName(language); config.setOutputDir(output.getAbsolutePath()); + if (environmentVariables != null) { + for(String key : environmentVariables.keySet()) { + System.setProperty(key, environmentVariables.get(key)); + } + } + if (null != templateDirectory) { config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory.getAbsolutePath()); } From 6253a592d96a34cd3a3d3ea29bf9018e4a3dc762 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 14:54:29 -0700 Subject: [PATCH 53/78] added optional support for apis, supoprtingFiles --- .../io/swagger/codegen/DefaultGenerator.java | 133 ++++++++++++------ 1 file changed, 92 insertions(+), 41 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index f72d1acaa2a8..b1b7dd4e0465 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -51,21 +51,52 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { @Override public List generate() { - boolean generateApis = true; - boolean generateModels = true; - boolean generateSupportingFiles = true; + Boolean generateApis = null; + Boolean generateModels = null; + Boolean generateSupportingFiles = null; Set modelsToGenerate = null; + Set apisToGenerate = null; + Set supportingFilesToGenerate = null; // allows generating only models by specifying a CSV of models to generate, or empty for all if(System.getProperty("models") != null) { - generateApis = false; - generateSupportingFiles = false; String modelNames = System.getProperty("models"); if(!modelNames.isEmpty()) { + generateModels = true; modelsToGenerate = new HashSet(Arrays.asList(modelNames.split(","))); } } + if(System.getProperty("apis") != null) { + String apiNames = System.getProperty("apis"); + if(!apiNames.isEmpty()) { + generateApis = true; + apisToGenerate = new HashSet(Arrays.asList(apiNames.split(","))); + } + } + if(System.getProperty("supportingFiles") != null) { + String supportingFiles = System.getProperty("supportingFiles"); + if(!supportingFiles.isEmpty()) { + generateSupportingFiles = true; + supportingFilesToGenerate = new HashSet(Arrays.asList(supportingFiles.split(","))); + } + } + + if(generateApis == null && apisToGenerate == null && supportingFilesToGenerate == null) { + // no specifics are set, generate everything + generateApis = true; generateModels = true; generateSupportingFiles = true; + } + else { + if(generateApis == null) { + generateApis = false; + } + if(generateModels == null) { + generateModels = false; + } + if(generateSupportingFiles == null) { + generateSupportingFiles = false; + } + } if (swagger == null || config == null) { throw new RuntimeException("missing swagger input or config!"); @@ -206,6 +237,15 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { // apis Map> paths = processPaths(swagger.getPaths()); if(generateApis) { + if(apisToGenerate != null) { + Map> updatedPaths = new TreeMap>(); + for(String m : paths.keySet()) { + if(apisToGenerate.contains(m)) { + updatedPaths.put(m, paths.get(m)); + } + } + paths = updatedPaths; + } for (String tag : paths.keySet()) { try { List ops = paths.get(tag); @@ -318,46 +358,57 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { String templateFile = getFullTemplateFile(config, support.templateFile); - if (templateFile.endsWith("mustache")) { - String template = readTemplate(templateFile); - Template tmpl = Mustache.compiler() - .withLoader(new Mustache.TemplateLoader() { - @Override - public Reader getTemplate(String name) { - return getTemplateReader(config.templateDir() + File.separator + name + ".mustache"); - } - }) - .defaultValue("") - .compile(template); - - writeToFile(outputFilename, tmpl.execute(bundle)); - files.add(new File(outputFilename)); - } else { - InputStream in = null; - - try { - in = new FileInputStream(templateFile); - } catch (Exception e) { - // continue + boolean shouldGenerate = true; + if(supportingFilesToGenerate != null) { + if(supportingFilesToGenerate.contains(support.destinationFilename)) { + shouldGenerate = true; } - if (in == null) { - in = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(templateFile)); + else { + shouldGenerate = false; } - File outputFile = new File(outputFilename); - OutputStream out = new FileOutputStream(outputFile, false); - if (in != null && out != null) { - System.out.println("writing file " + outputFile); - IOUtils.copy(in, out); + } + if(shouldGenerate) { + if (templateFile.endsWith("mustache")) { + String template = readTemplate(templateFile); + Template tmpl = Mustache.compiler() + .withLoader(new Mustache.TemplateLoader() { + @Override + public Reader getTemplate(String name) { + return getTemplateReader(config.templateDir() + File.separator + name + ".mustache"); + } + }) + .defaultValue("") + .compile(template); + + writeToFile(outputFilename, tmpl.execute(bundle)); + files.add(new File(outputFilename)); } else { - if (in == null) { - System.out.println("can't open " + templateFile + " for input"); - } - if (out == null) { - System.out.println("can't open " + outputFile + " for output"); - } - } + InputStream in = null; - files.add(outputFile); + try { + in = new FileInputStream(templateFile); + } catch (Exception e) { + // continue + } + if (in == null) { + in = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(templateFile)); + } + File outputFile = new File(outputFilename); + OutputStream out = new FileOutputStream(outputFile, false); + if (in != null && out != null) { + System.out.println("writing file " + outputFile); + IOUtils.copy(in, out); + } else { + if (in == null) { + System.out.println("can't open " + templateFile + " for input"); + } + if (out == null) { + System.out.println("can't open " + outputFile + " for output"); + } + } + + files.add(outputFile); + } } } catch (Exception e) { throw new RuntimeException("Could not generate supporting file '" + support + "'", e); From 7170f7fa0143b3348afeec7dc5fbf627e85fcb17 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 15:28:49 -0700 Subject: [PATCH 54/78] updated supporitng file support --- .../java/io/swagger/codegen/DefaultGenerator.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index b1b7dd4e0465..8a017bfc07e1 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -62,27 +62,27 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { // allows generating only models by specifying a CSV of models to generate, or empty for all if(System.getProperty("models") != null) { String modelNames = System.getProperty("models"); + generateModels = true; if(!modelNames.isEmpty()) { - generateModels = true; modelsToGenerate = new HashSet(Arrays.asList(modelNames.split(","))); } } if(System.getProperty("apis") != null) { String apiNames = System.getProperty("apis"); + generateApis = true; if(!apiNames.isEmpty()) { - generateApis = true; apisToGenerate = new HashSet(Arrays.asList(apiNames.split(","))); } } if(System.getProperty("supportingFiles") != null) { String supportingFiles = System.getProperty("supportingFiles"); + generateSupportingFiles = true; if(!supportingFiles.isEmpty()) { - generateSupportingFiles = true; supportingFilesToGenerate = new HashSet(Arrays.asList(supportingFiles.split(","))); } } - if(generateApis == null && apisToGenerate == null && supportingFilesToGenerate == null) { + if(generateApis == null && generateModels == null && generateSupportingFiles == null) { // no specifics are set, generate everything generateApis = true; generateModels = true; generateSupportingFiles = true; } @@ -178,7 +178,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { List sortedModelKeys = sortModelsByInheritance(definitions); if(generateModels) { - if(modelsToGenerate != null) { + if(modelsToGenerate != null && modelsToGenerate.size() > 0) { List updatedKeys = new ArrayList(); for(String m : sortedModelKeys) { if(modelsToGenerate.contains(m)) { @@ -237,7 +237,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { // apis Map> paths = processPaths(swagger.getPaths()); if(generateApis) { - if(apisToGenerate != null) { + if(apisToGenerate != null && apisToGenerate.size() > 0) { Map> updatedPaths = new TreeMap>(); for(String m : paths.keySet()) { if(apisToGenerate.contains(m)) { @@ -359,7 +359,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { String templateFile = getFullTemplateFile(config, support.templateFile); boolean shouldGenerate = true; - if(supportingFilesToGenerate != null) { + if(supportingFilesToGenerate != null && supportingFilesToGenerate.size() > 0) { if(supportingFilesToGenerate.contains(support.destinationFilename)) { shouldGenerate = true; } From adeff7855c6cfec42f1e738fde87a825ac6246c7 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 15:34:20 -0700 Subject: [PATCH 55/78] instructions for selective generation --- README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/README.md b/README.md index 7b130b4b8ab7..a6b0baaca19f 100644 --- a/README.md +++ b/README.md @@ -212,6 +212,36 @@ to the code generator like this: Great for creating libraries on your ci server, from the [Swagger Editor](http://editor.swagger.io)... or while coding on an airplane. +### Selective generation +You may not want to generate *all* models in your project. Likewise you may want just one or two apis to be written. If that's the case, you can use system properties to control the output: + +The default is generate *everything* supported by the specific library. Once you enable a feature, it will restrict the contents generated: + +``` +# generate only models +java -Dmodels {opts} + +# generate only apis +java -Dapis {opts} + +# generate only supporting files +java -DsupportingFiles + +# generate models and supporting files +java -Dmodels -DsupportingFiles +``` + +To control the specific files being generated, you can pass a CSV list of what you want: +``` +# generate the User and Pet models only +-Dmodels=User,Pet + +# generate the User model and the supportingFile `StringUtil.java`: +-Dmodels=User -DsupportingFiles=StringUtil.java +``` + +When using selective generation, _only_ the templates needed for the specific generation will be used. + ### Customizing the generator There are different aspects of customizing the code generator beyond just creating or modifying templates. Each language has a supporting configuration file to handle different type mappings, etc: From 91afec43a67da5ae5862ea4b2a9aeaf131aaf07e Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 15:43:02 -0700 Subject: [PATCH 56/78] fixed NPE on empty props --- .../main/java/io/swagger/codegen/plugin/CodeGenMojo.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index 805afe22a94a..22726c84c046 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -131,7 +131,12 @@ public class CodeGenMojo extends AbstractMojo { if (environmentVariables != null) { for(String key : environmentVariables.keySet()) { - System.setProperty(key, environmentVariables.get(key)); + String value = environmentVariables.get(key); + if(value == null) { + // don't put null values + value = ""; + } + System.setProperty(key, value); } } From 1eed1917b91c3b6a506f5033969c95221a288ea5 Mon Sep 17 00:00:00 2001 From: Nick Bruno Date: Thu, 22 Oct 2015 22:33:20 -0400 Subject: [PATCH 57/78] Ensure hasMore is updated when reconciling enum properties from parent --- .../codegen/languages/JavaClientCodegen.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index d265e5a72327..b492d1bd13cf 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -507,6 +507,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { List codegenProperties = codegenModel.vars; // Iterate over all of the parent model properties + boolean removedChildEnum = false; for (CodegenProperty parentModelCodegenPropery : parentModelCodegenProperties) { // Look for enums if (parentModelCodegenPropery.isEnum) { @@ -519,12 +520,21 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { // We found an enum in the child class that is // a duplicate of the one in the parent, so remove it. iterator.remove(); + removedChildEnum = true; } } } } - - codegenModel.vars = codegenProperties; + + if(removedChildEnum) { + // If we removed an entry from this model's vars, we need to ensure hasMore is updated + int count = 0, numVars = codegenProperties.size(); + for(CodegenProperty codegenProperty : codegenProperties) { + count += 1; + codegenProperty.hasMore = (count < numVars) ? true : null; + } + codegenModel.vars = codegenProperties; + } } return codegenModel; From dd34d75f003875540d6f604ef70c7f8b077d7ff3 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 23 Oct 2015 12:46:44 +0800 Subject: [PATCH 58/78] better error message for empty operationId --- .../src/main/java/io/swagger/codegen/DefaultGenerator.java | 3 ++- .../java/io/swagger/codegen/languages/JavaClientCodegen.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index d240d43d92d9..d768912bfe20 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -531,7 +531,8 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { + " Tag: " + tag + "\n"// + " Operation: " + operation.getOperationId() + "\n" // + " Resource: " + httpMethod + " " + resourcePath + "\n"// - + " Definitions: " + swagger.getDefinitions(); + + " Definitions: " + swagger.getDefinitions() + "\n" // + + " Exception: " + ex.getMessage(); throw new RuntimeException(msg, ex); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index d265e5a72327..c1ddfb4065e7 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -378,7 +378,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { public String toOperationId(String operationId) { // throw exception if method name is empty if (StringUtils.isEmpty(operationId)) { - throw new RuntimeException("Empty method name (operationId) not allowed"); + throw new RuntimeException("Empty method/operation name (operationId) not allowed"); } // method name cannot use reserved keyword, e.g. return From a6e4203cd53109c2aaec412be3b9a503d6b2f91f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 22 Oct 2015 22:39:09 -0700 Subject: [PATCH 59/78] added property check --- .../src/main/java/io/swagger/codegen/InlineModelResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index a15511082bf5..d2f47f2a6f6d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -204,7 +204,7 @@ public class InlineModelResolver { Map modelsToAdd = new HashMap(); for (String key : properties.keySet()) { Property property = properties.get(key); - if (property instanceof ObjectProperty) { + if (property instanceof ObjectProperty && ((ObjectProperty)property).getProperties().size() > 0) { String modelName = uniqueName(path + "_" + key); ObjectProperty op = (ObjectProperty) property; From 940e76f45f2ae82ac1f7b09707a93e39b46ae4a1 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 23 Oct 2015 17:08:12 +0800 Subject: [PATCH 60/78] Ruby client: include empty arrays in model serialization --- .../src/main/resources/ruby/base_object.mustache | 13 ++++++------- .../ruby/lib/petstore/models/base_object.rb | 13 ++++++------- .../client/petstore/ruby/spec/api_client_spec.rb | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache index 77b320d07f43..733537cb14e6 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache @@ -60,14 +60,13 @@ module {{moduleName}} # return the object in the form of hash def to_hash hash = {} - self.class.attribute_map.each_pair do |key, value| - if self.send(key).is_a?(Array) - next if self.send(key).empty? - hash[value] = self.send(key).select{|v| !v.nil?}.map{ |v| _to_hash v} unless self.send(key).nil? + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + next if value.nil? + if value.is_a?(Array) + hash[param] = value.compact.map{ |v| _to_hash(v) } else - unless (_tmp_value = _to_hash self.send(key)).nil? - hash[value] = _tmp_value - end + hash[param] = value end end hash diff --git a/samples/client/petstore/ruby/lib/petstore/models/base_object.rb b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb index f17eef349e2c..d5cc842164ad 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/base_object.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb @@ -60,14 +60,13 @@ module Petstore # return the object in the form of hash def to_hash hash = {} - self.class.attribute_map.each_pair do |key, value| - if self.send(key).is_a?(Array) - next if self.send(key).empty? - hash[value] = self.send(key).select{|v| !v.nil?}.map{ |v| _to_hash v} unless self.send(key).nil? + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + next if value.nil? + if value.is_a?(Array) + hash[param] = value.compact.map{ |v| _to_hash(v) } else - unless (_tmp_value = _to_hash self.send(key)).nil? - hash[value] = _tmp_value - end + hash[param] = value end end hash diff --git a/samples/client/petstore/ruby/spec/api_client_spec.rb b/samples/client/petstore/ruby/spec/api_client_spec.rb index b63ec94ccaac..cd9016c9a0ba 100644 --- a/samples/client/petstore/ruby/spec/api_client_spec.rb +++ b/samples/client/petstore/ruby/spec/api_client_spec.rb @@ -102,4 +102,18 @@ describe Petstore::ApiClient do end end + describe "#object_to_hash" do + it "ignores nils and includes empty arrays" do + api_client = Petstore::ApiClient.new + pet = Petstore::Pet.new + pet.id = 1 + pet.name = '' + pet.status = nil + pet.photo_urls = nil + pet.tags = [] + expected = {id: 1, name: '', tags: []} + api_client.object_to_hash(pet).should == expected + end + end + end From dcec2e7b5d6a17a8c91aacdfd1f24d2b81a5259f Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 23 Oct 2015 18:03:38 +0800 Subject: [PATCH 61/78] Forgot to use `_to_hash` for non-array value --- .../src/main/resources/ruby/base_object.mustache | 2 +- samples/client/petstore/ruby/lib/petstore/models/base_object.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache index 733537cb14e6..ccf6db4a4fd1 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache @@ -66,7 +66,7 @@ module {{moduleName}} if value.is_a?(Array) hash[param] = value.compact.map{ |v| _to_hash(v) } else - hash[param] = value + hash[param] = _to_hash(value) end end hash diff --git a/samples/client/petstore/ruby/lib/petstore/models/base_object.rb b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb index d5cc842164ad..4a9a781ae649 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/base_object.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb @@ -66,7 +66,7 @@ module Petstore if value.is_a?(Array) hash[param] = value.compact.map{ |v| _to_hash(v) } else - hash[param] = value + hash[param] = _to_hash(value) end end hash From c6946a36c4ba1b457a21016d7b2aba531de9c3d8 Mon Sep 17 00:00:00 2001 From: Ivan Ushankin Date: Fri, 23 Oct 2015 15:48:09 +0300 Subject: [PATCH 62/78] Fix for allowable values in the Mustache template --- .../JavaJaxRS/allowableValues.mustache | 1 + .../resources/JavaJaxRS/bodyParams.mustache | 2 +- .../resources/JavaJaxRS/formParams.mustache | 2 +- .../resources/JavaJaxRS/headerParams.mustache | 2 +- .../resources/JavaJaxRS/pathParams.mustache | 2 +- .../resources/JavaJaxRS/queryParams.mustache | 2 +- .../java/jaxrs/AllowableValuesTest.java | 64 +++++++++++++++++++ 7 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/allowableValues.mustache create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/java/jaxrs/AllowableValuesTest.java diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/allowableValues.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/allowableValues.mustache new file mode 100644 index 000000000000..a48256d027a1 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/allowableValues.mustache @@ -0,0 +1 @@ +{{#allowableValues}}allowableValues="{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}{{^values}}range=[{{#min}}{{.}}{{/min}}{{^min}}-infinity{{/min}}, {{#max}}{{.}}{{/max}}{{^max}}infinity{{/max}}]{{/values}}"{{/allowableValues}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/bodyParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/bodyParams.mustache index 86546afb9ca4..2b28441d3d05 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/bodyParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/bodyParams.mustache @@ -1 +1 @@ -{{#isBodyParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}} {{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) {{{dataType}}} {{paramName}}{{/isBodyParam}} \ No newline at end of file +{{#isBodyParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) {{{dataType}}} {{paramName}}{{/isBodyParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/formParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/formParams.mustache index 1bae4717f4dc..632d39cf23ec 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/formParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/formParams.mustache @@ -1,2 +1,2 @@ -{{#isFormParam}}{{#notFile}}@ApiParam(value = "{{{description}}}"{{#required}}, required=true{{/required}} {{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}})@FormParam("{{paramName}}") {{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}} @FormDataParam("file") InputStream inputStream, +{{#isFormParam}}{{#notFile}}@ApiParam(value = "{{{description}}}"{{#required}}, required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}})@FormParam("{{paramName}}") {{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}} @FormDataParam("file") InputStream inputStream, @FormDataParam("file") FormDataContentDisposition fileDetail{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/headerParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/headerParams.mustache index 84a801e48acf..1360d796826b 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/headerParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/headerParams.mustache @@ -1 +1 @@ -{{#isHeaderParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}} {{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}})@HeaderParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isHeaderParam}} \ No newline at end of file +{{#isHeaderParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}})@HeaderParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isHeaderParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pathParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pathParams.mustache index 5bb31c704f75..8d80210b4b41 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pathParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pathParams.mustache @@ -1 +1 @@ -{{#isPathParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}} {{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @PathParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isPathParam}} \ No newline at end of file +{{#isPathParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @PathParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/queryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/queryParams.mustache index 067493867c9d..342da154a877 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/queryParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/queryParams.mustache @@ -1 +1 @@ -{{#isQueryParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file +{{#isQueryParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/jaxrs/AllowableValuesTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/jaxrs/AllowableValuesTest.java new file mode 100644 index 000000000000..ef24287b0051 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/jaxrs/AllowableValuesTest.java @@ -0,0 +1,64 @@ +package io.swagger.codegen.java.jaxrs; + +import io.swagger.codegen.CodegenParameter; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.samskivert.mustache.Mustache; +import com.samskivert.mustache.Template; +import org.apache.commons.io.IOUtils; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +public class AllowableValuesTest { + + private static final String TEMPLATE_FILE = "JavaJaxRS/allowableValues.mustache"; + private static final String PROVIDER_NAME = "operations"; + + private static String loadClassResource(Class cls, String name) throws IOException { + InputStream in = null; + try { + in = cls.getClassLoader().getResourceAsStream(name); + return IOUtils.toString(in, StandardCharsets.UTF_8); + } finally { + IOUtils.closeQuietly(in); + } + } + + @DataProvider(name = PROVIDER_NAME) + private Object[][] resource() { + final CodegenParameter param1 = new CodegenParameter(); + final CodegenParameter param2 = new CodegenParameter() {{ + allowableValues = ImmutableMap.of("values", ImmutableList.of("item1", "item2", "item3")); + }}; + final CodegenParameter param3 = new CodegenParameter() {{ + allowableValues = ImmutableMap.of("min", 1, "max", 10); + }}; + final CodegenParameter param4 = new CodegenParameter() {{ + allowableValues = ImmutableMap.of("min", 1); + }}; + final CodegenParameter param5 = new CodegenParameter() {{ + allowableValues = ImmutableMap.of("max", 10); + }}; + + return new Object[][]{ + {param1, ""}, + {param2, "allowableValues=\"item1, item2, item3\""}, + {param3, "allowableValues=\"range=[1, 10]\""}, + {param4, "allowableValues=\"range=[1, infinity]\""}, + {param5, "allowableValues=\"range=[-infinity, 10]\""}, + }; + } + + @Test(dataProvider = PROVIDER_NAME) + public void annotationsTest(CodegenParameter parameter, String expected) throws IOException { + final Template template = Mustache.compiler().compile(loadClassResource(this.getClass(), TEMPLATE_FILE)); + + Assert.assertEquals(template.execute(parameter), expected); + } +} From c957641079970962d8169a00a3b8eb47ddca6a48 Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Fri, 23 Oct 2015 13:30:02 +0300 Subject: [PATCH 63/78] Options processing has been fixed --- .../swagger/generator/online/Generator.java | 104 +- .../online/OnlineGeneratorOptionsTest.java | 97 ++ .../online/OnlineJavaClientOptionsTest.java | 34 + .../online/OnlineJaxRSServerOptionsTest.java | 9 + .../src/test/resources/petstore.json | 1030 +++++++++++++++++ 5 files changed, 1201 insertions(+), 73 deletions(-) create mode 100644 modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java create mode 100644 modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java create mode 100644 modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJaxRSServerOptionsTest.java create mode 100644 modules/swagger-generator/src/test/resources/petstore.json diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index 775c96cda2ea..6e17c38218e3 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -17,22 +17,44 @@ import io.swagger.util.Json; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.apache.commons.lang3.StringUtils.isNotEmpty; - import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Map; public class Generator { static Logger LOGGER = LoggerFactory.getLogger(Generator.class); + public enum Type { + CLIENT("client"), + SERVER("server"); + + private String name; + + Type(String name) { + this.name = name; + } + + String getTypeName() { + return name; + } + } + public static String generateClient(String language, GeneratorInput opts) throws ApiException { - Swagger swagger; - LOGGER.debug("generate client for " + language); + return generate(language, opts, Type.CLIENT); + } + + public static String generateServer(String language, GeneratorInput opts) throws ApiException { + return generate(language, opts, Type.SERVER); + } + + private static String generate(String language, GeneratorInput opts, Type type) throws ApiException { + LOGGER.debug(String.format("generate %s for %s", type.getTypeName(), language)); if (opts == null) { throw new BadRequestException(400, "No options were supplied"); } JsonNode node = opts.getSpec(); + Swagger swagger; if (node == null) { if (opts.getSwaggerUrl() != null) { swagger = new SwaggerParser().read(opts.getSwaggerUrl()); @@ -48,7 +70,8 @@ public class Generator { ClientOptInput clientOptInput = new ClientOptInput(); ClientOpts clientOpts = new ClientOpts(); - String outputFolder = getTmpFolder().getAbsolutePath() + File.separator + language + "-client"; + String outputFolder = getTmpFolder().getAbsolutePath() + File.separator + language + "-" + + type.getTypeName(); String outputFilename = outputFolder + "-bundle.zip"; clientOptInput @@ -61,16 +84,10 @@ public class Generator { } catch(RuntimeException e) { throw new BadRequestException(400, "Unsupported target " + language + " supplied"); } - + if (opts.getOptions() != null) { - for(String key : new String[]{"apiPackage", "modelPackage", "invokerPackage", "groupId", "artifactId", "artifactVersion"}) { - if(isNotEmpty(opts.getOptions().get(key))) { - codegenConfig.additionalProperties().put(key , opts.getOptions().get(key)); - } - } - - if (isNotEmpty(opts.getOptions().get("library"))) { - codegenConfig.setLibrary(opts.getOptions().get("library")); + for (Map.Entry entry : opts.getOptions().entrySet()) { + codegenConfig.additionalProperties().put(entry.getKey(), entry.getValue()); } } @@ -97,65 +114,6 @@ public class Generator { return outputFilename; } - 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) { - 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, true); - } - 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) { return null; } diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java new file mode 100644 index 000000000000..e6eb42abb355 --- /dev/null +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java @@ -0,0 +1,97 @@ +package io.swagger.generator.online; + +import static org.testng.Assert.assertNotEquals; + +import io.swagger.generator.exception.ApiException; +import io.swagger.generator.model.GeneratorInput; +import io.swagger.generator.online.Generator; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +public abstract class OnlineGeneratorOptionsTest { + private final boolean isServer; + private final String language; + + protected OnlineGeneratorOptionsTest(String language, boolean isServer) { + this.language = language; + this.isServer = isServer; + } + + @Test + public void optionsTest() throws ApiException, IOException { + final GeneratorInput input = new GeneratorInput(); + final HashMap options = convertOptions(); + + final Maps.EntryTransformer transformer = + new Maps.EntryTransformer() { + public String transformEntry(String key, InvocationCounter value) { + return value.getValue(); + } + }; + + input.setOptions(Maps.transformEntries(options, transformer)); + final ObjectMapper mapper = new ObjectMapper(); + input.setSpec(mapper.readTree(loadClassResource(getClass(), "petstore.json"))); + String outputFilename; + if (isServer) { + outputFilename = Generator.generateServer(language, input); + } else { + outputFilename = Generator.generateClient(language, input); + } + final File dir = new File(new File(outputFilename).getParent()); + FileUtils.deleteDirectory(dir); + for (InvocationCounter option : options.values()) { + assertNotEquals(option.getCounter(), 0, String.format("Option \"%s\" wasn't processed.", + option.getValue())); + } + } + + protected abstract Map getOptions(); + + private HashMap convertOptions() { + HashMap options = new HashMap(); + for (Map.Entry entry : getOptions().entrySet()) { + options.put(entry.getKey(), new InvocationCounter(entry.getValue())); + } + return options; + } + + private static String loadClassResource(Class cls, String name) throws IOException { + InputStream in = null; + try { + in = cls.getClassLoader().getResourceAsStream(name); + return IOUtils.toString(in, StandardCharsets.UTF_8); + } finally { + IOUtils.closeQuietly(in); + } + } + + private static class InvocationCounter { + private String value; + private int counter; + + public InvocationCounter(String value) { + this.value = value; + } + + public int getCounter() { + return counter; + } + + public String getValue() { + ++counter; + return value; + } + } +} diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java new file mode 100644 index 000000000000..50605cff1109 --- /dev/null +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJavaClientOptionsTest.java @@ -0,0 +1,34 @@ +package io.swagger.generator.online; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + +public class OnlineJavaClientOptionsTest extends OnlineGeneratorOptionsTest { + + public OnlineJavaClientOptionsTest() { + super("java", false); + } + + protected OnlineJavaClientOptionsTest(String language, boolean isServer) { + super(language, isServer); + } + + @Override + protected Map getOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put("modelPackage", "package") + .put("apiPackage", "apiPackage") + .put("sortParamsByRequiredFlag", "false") + .put("invokerPackage", "io.swagger.client.test") + .put("groupId", "io.swagger.test") + .put("artifactId", "swagger-java-client-test") + .put("artifactVersion", "1.0.0-SNAPSHOT") + .put("sourceFolder", "src/main/java/test") + .put("localVariablePrefix", "tst") + .put("serializableModel", "false") + .put("fullJavaUtil", "true") + .put("library", "jersey2") + .build(); + } +} diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJaxRSServerOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJaxRSServerOptionsTest.java new file mode 100644 index 000000000000..c64466fe696e --- /dev/null +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineJaxRSServerOptionsTest.java @@ -0,0 +1,9 @@ +package io.swagger.generator.online; + +public class OnlineJaxRSServerOptionsTest extends OnlineJavaClientOptionsTest{ + + public OnlineJaxRSServerOptionsTest() { + super("jaxrs", true); + } + +} diff --git a/modules/swagger-generator/src/test/resources/petstore.json b/modules/swagger-generator/src/test/resources/petstore.json new file mode 100644 index 000000000000..67c4d47292da --- /dev/null +++ b/modules/swagger-generator/src/test/resources/petstore.json @@ -0,0 +1,1030 @@ +{ + "swagger": "2.0", + "info": { + "description": "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). 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://swagger.io/terms/", + "contact": { + "email": "apiteam@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + } + }, + "host": "petstore.swagger.io", + "basePath": "/v2", + "tags": [ + { + "name": "pet", + "description": "Everything about your Pets", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } + }, + { + "name": "store", + "description": "Access to Petstore orders" + }, + { + "name": "user", + "description": "Operations about user", + "externalDocs": { + "description": "Find out more about our store", + "url": "http://swagger.io" + } + } + ], + "schemes": [ + "http" + ], + "paths": { + "/pet": { + "post": { + "tags": [ + "pet" + ], + "summary": "Add a new pet to the store", + "description": "", + "operationId": "addPet", + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Pet object that needs to be added to the store", + "required": true, + "schema": { + "$ref": "#/definitions/Pet" + } + } + ], + "responses": { + "405": { + "description": "Invalid input" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "put": { + "tags": [ + "pet" + ], + "summary": "Update an existing pet", + "description": "", + "operationId": "updatePet", + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Pet object that needs to be added to the store", + "required": true, + "schema": { + "$ref": "#/definitions/Pet" + } + } + ], + "responses": { + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Pet not found" + }, + "405": { + "description": "Validation exception" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByStatus": { + "get": { + "tags": [ + "pet" + ], + "summary": "Finds Pets by status", + "description": "Multiple status values can be provided with comma seperated strings", + "operationId": "findPetsByStatus", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "status", + "in": "query", + "description": "Status values that need to be considered for filter", + "required": true, + "type": "array", + "items": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "default": "available" + }, + "collectionFormat": "csv" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Pet" + } + } + }, + "400": { + "description": "Invalid status value" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByTags": { + "get": { + "tags": [ + "pet" + ], + "summary": "Finds Pets by tags", + "description": "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", + "operationId": "findPetsByTags", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "tags", + "in": "query", + "description": "Tags to filter by", + "required": true, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Pet" + } + } + }, + "400": { + "description": "Invalid tag value" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}": { + "get": { + "tags": [ + "pet" + ], + "summary": "Find pet by ID", + "description": "Returns a single pet", + "operationId": "getPetById", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to return", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/Pet" + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Pet not found" + } + }, + "security": [ + { + "api_key": [] + } + ] + }, + "post": { + "tags": [ + "pet" + ], + "summary": "Updates a pet in the store with form data", + "description": "", + "operationId": "updatePetWithForm", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet that needs to be updated", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "name", + "in": "formData", + "description": "Updated name of the pet", + "required": false, + "type": "string" + }, + { + "name": "status", + "in": "formData", + "description": "Updated status of the pet", + "required": false, + "type": "string" + } + ], + "responses": { + "405": { + "description": "Invalid input" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "delete": { + "tags": [ + "pet" + ], + "summary": "Deletes a pet", + "description": "", + "operationId": "deletePet", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "api_key", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "petId", + "in": "path", + "description": "Pet id to delete", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "400": { + "description": "Invalid pet value" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}/uploadImage": { + "post": { + "tags": [ + "pet" + ], + "summary": "uploads an image", + "description": "", + "operationId": "uploadFile", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to update", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "additionalMetadata", + "in": "formData", + "description": "Additional data to pass to server", + "required": false, + "type": "string" + }, + { + "name": "file", + "in": "formData", + "description": "file to upload", + "required": false, + "type": "file" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/ApiResponse" + } + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/store/inventory": { + "get": { + "tags": [ + "store" + ], + "summary": "Returns pet inventories by status", + "description": "Returns a map of status codes to quantities", + "operationId": "getInventory", + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } + } + } + }, + "security": [ + { + "api_key": [] + } + ] + } + }, + "/store/order": { + "post": { + "tags": [ + "store" + ], + "summary": "Place an order for a pet", + "description": "", + "operationId": "placeOrder", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "order placed for purchasing the pet", + "required": true, + "schema": { + "$ref": "#/definitions/Order" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/Order" + } + }, + "400": { + "description": "Invalid Order" + } + } + } + }, + "/store/order/{orderId}": { + "get": { + "tags": [ + "store" + ], + "summary": "Find purchase order by ID", + "description": "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", + "operationId": "getOrderById", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of pet that needs to be fetched", + "required": true, + "type": "integer", + "maximum": 5.0, + "minimum": 1.0, + "format": "int64" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/Order" + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + }, + "delete": { + "tags": [ + "store" + ], + "summary": "Delete purchase order by ID", + "description": "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", + "operationId": "deleteOrder", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of the order that needs to be deleted", + "required": true, + "type": "string", + "minimum": 1.0 + } + ], + "responses": { + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + } + }, + "/user": { + "post": { + "tags": [ + "user" + ], + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Created user object", + "required": true, + "schema": { + "$ref": "#/definitions/User" + } + } + ], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithArray": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithArrayInput", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "List of user object", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + } + } + ], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithListInput", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "List of user object", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + } + } + ], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/login": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs user into the system", + "description": "", + "operationId": "loginUser", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "username", + "in": "query", + "description": "The user name for login", + "required": true, + "type": "string" + }, + { + "name": "password", + "in": "query", + "description": "The password for login in clear text", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "string" + }, + "headers": { + "X-Rate-Limit": { + "type": "integer", + "format": "int32", + "description": "calls per hour allowed by the user" + }, + "X-Expires-After": { + "type": "string", + "format": "date-time", + "description": "date in UTC when toekn expires" + } + } + }, + "400": { + "description": "Invalid username/password supplied" + } + } + } + }, + "/user/logout": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/{username}": { + "get": { + "tags": [ + "user" + ], + "summary": "Get user by user name", + "description": "", + "operationId": "getUserByName", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be fetched. Use user1 for testing. ", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/User" + } + }, + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "put": { + "tags": [ + "user" + ], + "summary": "Updated user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "name that need to be deleted", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Updated user object", + "required": true, + "schema": { + "$ref": "#/definitions/User" + } + } + ], + "responses": { + "400": { + "description": "Invalid user supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "delete": { + "tags": [ + "user" + ], + "summary": "Delete user", + "description": "This can only be done by the logged in user.", + "operationId": "deleteUser", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be deleted", + "required": true, + "type": "string" + } + ], + "responses": { + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + } + } + }, + "securityDefinitions": { + "petstore_auth": { + "type": "oauth2", + "authorizationUrl": "http://petstore.swagger.io/api/oauth/dialog", + "flow": "implicit", + "scopes": { + "write:pets": "modify pets in your account", + "read:pets": "read your pets" + } + }, + "api_key": { + "type": "apiKey", + "name": "api_key", + "in": "header" + } + }, + "definitions": { + "Order": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "petId": { + "type": "integer", + "format": "int64" + }, + "quantity": { + "type": "integer", + "format": "int32" + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "Order Status", + "enum": [ + "placed", + "approved", + "delivered" + ] + }, + "complete": { + "type": "boolean", + "default": false + } + }, + "xml": { + "name": "Order" + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "username": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "userStatus": { + "type": "integer", + "format": "int32", + "description": "User Status" + } + }, + "xml": { + "name": "User" + } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "Category" + } + }, + "Tag": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "Tag" + } + }, + "ApiResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "Pet": { + "type": "object", + "required": [ + "name", + "photoUrls" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "category": { + "$ref": "#/definitions/Category" + }, + "name": { + "type": "string", + "example": "doggie" + }, + "photoUrls": { + "type": "array", + "xml": { + "name": "photoUrl", + "wrapped": true + }, + "items": { + "type": "string" + } + }, + "tags": { + "type": "array", + "xml": { + "name": "tag", + "wrapped": true + }, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "status": { + "type": "string", + "description": "pet status in the store", + "enum": [ + "available", + "pending", + "sold" + ] + } + }, + "xml": { + "name": "Pet" + } + } + }, + "externalDocs": { + "description": "Find out more about Swagger", + "url": "http://swagger.io" + } +} From 6247dd0cdef6a978ae75f76caf4346595e077737 Mon Sep 17 00:00:00 2001 From: Tomek Cejner Date: Sun, 25 Oct 2015 00:04:25 +0200 Subject: [PATCH 64/78] Swift enum names capitalization follows Swift convention. --- .../codegen/languages/SwiftCodegen.java | 13 +++++- .../codegen/languages/SwiftCodegenTest.java | 45 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/SwiftCodegenTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java index 9bb1dfd61d47..db0b0fc24eba 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java @@ -15,6 +15,7 @@ import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.WordUtils; import javax.annotation.Nullable; import java.util.*; @@ -236,7 +237,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { List values = (List) codegenProperty.allowableValues.get("values"); for (String value : values) { Map map = new HashMap(); - map.put("enum", StringUtils.capitalize(value)); + map.put("enum", toSwiftyEnumName(value)); map.put("raw", value); swiftEnums.add(map); } @@ -250,6 +251,16 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { return codegenProperty; } + public String toSwiftyEnumName(String value) { + // Prevent from breaking properly cased identifier + if (value.matches("[A-Z][a-z0-9]+[a-zA-Z0-9]*")) { + return value; + } + char[] separators = {'-', '_', ' '}; + return WordUtils.capitalizeFully(StringUtils.lowerCase(value), separators).replaceAll("[-_ ]", ""); + } + + @Override public String toApiName(String name) { if(name.length() == 0) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/SwiftCodegenTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/SwiftCodegenTest.java new file mode 100644 index 000000000000..acede31f7361 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/SwiftCodegenTest.java @@ -0,0 +1,45 @@ +package io.swagger.codegen.languages; + +import org.testng.Assert; +import org.testng.annotations.Test; + +public class SwiftCodegenTest { + + SwiftCodegen swiftCodegen = new SwiftCodegen(); + + @Test + public void shouldNotBreakCorrectName() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("EntryName"), "EntryName"); + } + + @Test + public void testSingleWordAllCaps() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("VALUE"), "Value"); + } + + @Test + public void testSingleWordLowercase() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("value"), "Value"); + } + + @Test + public void testCapitalsWithUnderscore() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("ENTRY_NAME"), "EntryName"); + } + + @Test + public void testCapitalsWithDash() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("ENTRY-NAME"), "EntryName"); + } + + @Test + public void testCapitalsWithSpace() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("ENTRY NAME"), "EntryName"); + } + + @Test + public void testLowercaseWithUnderscore() throws Exception { + Assert.assertEquals(swiftCodegen.toSwiftyEnumName("entry_name"), "EntryName"); + } + +} \ No newline at end of file From 78f8eaa687d029a0f72e565606fe5a4b784559bd Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 25 Oct 2015 16:31:40 -0700 Subject: [PATCH 65/78] set to release version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bd099a798e36..8298244f960f 100644 --- a/pom.xml +++ b/pom.xml @@ -517,7 +517,7 @@ - 1.0.11-SNAPSHOT + 1.0.11 2.11.1 2.3.4 1.5.4 From 3969a9f29400e25ab5710aa99f5931ecca75d0d7 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 25 Oct 2015 17:02:08 -0700 Subject: [PATCH 66/78] fix for #925 --- .../src/main/resources/JavaJaxRS/README.mustache | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache index 3f0809d4734d..e3e66a3a12a0 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache @@ -6,3 +6,9 @@ This server was generated by the [swagger-codegen](https://github.com/swagger-ap is an example of building a swagger-enabled JAX-RS server. This example uses the [JAX-RS](https://jax-rs-spec.java.net/) framework. + +To run the server, please execute the following: + +``` +mvn clean package jetty:run +``` \ No newline at end of file From dd3b253e15743f90a08e916bdc639725458c4520 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 25 Oct 2015 19:31:36 -0700 Subject: [PATCH 67/78] updated versions --- README.md | 4 ++-- modules/swagger-codegen-cli/pom.xml | 2 +- modules/swagger-codegen-maven-plugin/pom.xml | 2 +- modules/swagger-codegen/pom.xml | 2 +- .../src/main/resources/JavaJaxRS/README.mustache | 2 +- .../src/main/resources/JavaSpringMVC/pom.mustache | 2 +- modules/swagger-generator/pom.xml | 2 +- pom.xml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a6b0baaca19f..aa943387adee 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,8 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatibility | Notes -------------------------- | ------------ | -------------------------- | ----- -2.1.4-SNAPSHOT | | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) -2.1.3 (**current stable**) | 2015-08-24 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.3](https://github.com/swagger-api/swagger-codegen/tree/v2.1.3) +2.1.5-SNAPSHOT | | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) +2.1.4 (**current stable**) | 2015-10-25 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.4](https://github.com/swagger-api/swagger-codegen/tree/v2.1.3) 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-cli/pom.xml b/modules/swagger-codegen-cli/pom.xml index 5193e39531a6..5248aa2a7d33 100644 --- a/modules/swagger-codegen-cli/pom.xml +++ b/modules/swagger-codegen-cli/pom.xml @@ -3,7 +3,7 @@ io.swagger swagger-codegen-project - 2.1.4-SNAPSHOT + 2.1.4 ../.. 4.0.0 diff --git a/modules/swagger-codegen-maven-plugin/pom.xml b/modules/swagger-codegen-maven-plugin/pom.xml index 4d7107dba7e1..ca386fba4db8 100644 --- a/modules/swagger-codegen-maven-plugin/pom.xml +++ b/modules/swagger-codegen-maven-plugin/pom.xml @@ -6,7 +6,7 @@ io.swagger swagger-codegen-project - 2.1.4-SNAPSHOT + 2.1.4 ../.. swagger-codegen-maven-plugin diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 3ca7295a3c90..43a1213f4646 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -3,7 +3,7 @@ io.swagger swagger-codegen-project - 2.1.4-SNAPSHOT + 2.1.4 ../.. 4.0.0 diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache index e3e66a3a12a0..00431f63dbc9 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache @@ -11,4 +11,4 @@ To run the server, please execute the following: ``` mvn clean package jetty:run -``` \ No newline at end of file +``` diff --git a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache index ffbb0e435161..c4a71c199ce6 100644 --- a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache @@ -150,7 +150,7 @@ - 1.5.3 + 1.5.4 9.2.9.v20150224 1.13 1.6.3 diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index b42a51a86af0..ed38c6799295 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -4,7 +4,7 @@ io.swagger swagger-codegen-project - 2.1.4-SNAPSHOT + 2.1.4 ../.. swagger-generator diff --git a/pom.xml b/pom.xml index 8298244f960f..e877645ffd4b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ swagger-codegen-project pom swagger-codegen-project - 2.1.4-SNAPSHOT + 2.1.4 https://github.com/swagger-api/swagger-codegen scm:git:git@github.com:swagger-api/swagger-codegen.git From 6b7ceab0814138b58889010ec20c2a71a2feba11 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sun, 25 Oct 2015 20:59:52 -0700 Subject: [PATCH 68/78] updated to dev version --- README.md | 2 +- modules/swagger-codegen-cli/pom.xml | 2 +- modules/swagger-codegen-maven-plugin/pom.xml | 2 +- modules/swagger-codegen/pom.xml | 2 +- .../swagger-codegen/src/main/resources/Java/pom.mustache | 6 +----- modules/swagger-generator/pom.xml | 2 +- pom.xml | 4 ++-- samples/client/wordnik/android-java/pom.xml | 2 +- samples/client/wordnik/java/pom.xml | 7 +------ 9 files changed, 10 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index aa943387adee..a13c194837a1 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatibility | Notes -------------------------- | ------------ | -------------------------- | ----- 2.1.5-SNAPSHOT | | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) -2.1.4 (**current stable**) | 2015-10-25 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.4](https://github.com/swagger-api/swagger-codegen/tree/v2.1.3) +2.1.4 (**current stable**) | 2015-10-25 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.4](https://github.com/swagger-api/swagger-codegen/tree/v2.1.4) 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-cli/pom.xml b/modules/swagger-codegen-cli/pom.xml index 5248aa2a7d33..8bd59c89c802 100644 --- a/modules/swagger-codegen-cli/pom.xml +++ b/modules/swagger-codegen-cli/pom.xml @@ -3,7 +3,7 @@ io.swagger swagger-codegen-project - 2.1.4 + 2.1.5-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-codegen-maven-plugin/pom.xml b/modules/swagger-codegen-maven-plugin/pom.xml index ca386fba4db8..b309bb39596b 100644 --- a/modules/swagger-codegen-maven-plugin/pom.xml +++ b/modules/swagger-codegen-maven-plugin/pom.xml @@ -6,7 +6,7 @@ io.swagger swagger-codegen-project - 2.1.4 + 2.1.5-SNAPSHOT ../.. swagger-codegen-maven-plugin diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 43a1213f4646..116d6c0c9860 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -3,7 +3,7 @@ io.swagger swagger-codegen-project - 2.1.4 + 2.1.5-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-codegen/src/main/resources/Java/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/pom.mustache index c7dd1865518c..3f4d9d9a55b9 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pom.mustache @@ -6,11 +6,7 @@ jar {{artifactId}} {{artifactVersion}} - - scm:git:git@github.com:swagger-api/swagger-mustache.git - scm:git:git@github.com:swagger-api/swagger-codegen.git - https://github.com/swagger-api/swagger-codegen - + 2.2.0 diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index ed38c6799295..4f8794c331b4 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -4,7 +4,7 @@ io.swagger swagger-codegen-project - 2.1.4 + 2.1.5-SNAPSHOT ../.. swagger-generator diff --git a/pom.xml b/pom.xml index e877645ffd4b..466b8f300b8a 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ swagger-codegen-project pom swagger-codegen-project - 2.1.4 + 2.1.5-SNAPSHOT https://github.com/swagger-api/swagger-codegen scm:git:git@github.com:swagger-api/swagger-codegen.git @@ -521,7 +521,7 @@ 2.11.1 2.3.4 1.5.4 - 2.1.4 + 2.1.5-SNAPSHOT 2.3 1.2 4.8.1 diff --git a/samples/client/wordnik/android-java/pom.xml b/samples/client/wordnik/android-java/pom.xml index f2a84451d837..4fba0c1bf343 100644 --- a/samples/client/wordnik/android-java/pom.xml +++ b/samples/client/wordnik/android-java/pom.xml @@ -153,7 +153,7 @@ 1.5.3 - 2.1.4 + 2.1.5-SNAPSHOT 4.8.1 1.0.0 4.8.1 diff --git a/samples/client/wordnik/java/pom.xml b/samples/client/wordnik/java/pom.xml index 5fe61d6e0194..f15d9cac6aa0 100644 --- a/samples/client/wordnik/java/pom.xml +++ b/samples/client/wordnik/java/pom.xml @@ -6,11 +6,6 @@ jar swagger-client 1.0.0 - - scm:git:git@github.com:wordnik/swagger-mustache.git - scm:git:git@github.com:wordnik/swagger-codegen.git - https://github.com/wordnik/swagger-codegen - 2.2.0 @@ -159,7 +154,7 @@ 1.5.0-M1 1.7 - 2.1.4 + 2.1.5-SNAPSHOT 2.3 4.8.1 1.0.0 From 6792aea7f8b51aec04b6c4ac4a2581535e085349 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 26 Oct 2015 16:12:05 +0800 Subject: [PATCH 69/78] better comment for default codegen --- .../io/swagger/codegen/DefaultCodegen.java | 280 ++++++++++++++++-- 1 file changed, 256 insertions(+), 24 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index bdd6968eee84..eb77efa3456e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -235,18 +235,42 @@ public class DefaultCodegen { this.sortParamsByRequiredFlag = sortParamsByRequiredFlag; } + /** + * Return the file name of the Api + * + * @param name the file name of the Api + * @return the file name of the Api + */ public String toApiFilename(String name) { return toApiName(name); } + /** + * Return the variable name in the Api + * + * @param name the varible name of the Api + * @return the snake-cased variable name + */ public String toApiVarName(String name) { return snakeCase(name); } + /** + * Return the capitalized file name of the model + * + * @param name the model name + * @return the file name of the model + */ public String toModelFilename(String name) { return initialCaps(name); } + /** + * Return the operation ID (method name) + * + * @param operationId operation ID + * @return the sanitized method name + */ public String toOperationId(String operationId) { // throw exception if method name is empty if (StringUtils.isEmpty(operationId)) { @@ -256,6 +280,13 @@ public class DefaultCodegen { return operationId; } + /** + * Return the variable name by removing invalid characters and proper escaping if + * it's a reserved word. + * + * @param name the variable name + * @return the sanitized variable name + */ public String toVarName(String name) { if (reservedWords.contains(name)) { return escapeReservedWord(name); @@ -264,6 +295,13 @@ public class DefaultCodegen { } } + /** + * Return the parameter name by removing invalid characters and proper escaping if + * it's a reserved word. + * + * @param property Codegen property object + * @return the sanitized parameter name + */ public String toParamName(String name) { name = removeNonNameElementToCamelCase(name); if (reservedWords.contains(name)) { @@ -272,14 +310,33 @@ public class DefaultCodegen { return name; } + /** + * Return the Enum name (e.g. StatusEnum given 'status') + * + * @param property Codegen property object + * @return the Enum name + */ public String toEnumName(CodegenProperty property) { return StringUtils.capitalize(property.name) + "Enum"; } - + + /** + * Return the escaped name of the reserved word + * + * @param name the name to be escaped + * @throws Runtime exception as reserved word is not allowed (default behavior) + * @return the escaped reserved word + */ public String escapeReservedWord(String name) { throw new RuntimeException("reserved word " + name + " not allowed"); } + /** + * Return the fully-qualified "Model" name for import + * + * @param name the name of the "Model" + * @return the fully-qualified "Model" name for import + */ public String toModelImport(String name) { if ("".equals(modelPackage())) { return name; @@ -288,10 +345,26 @@ public class DefaultCodegen { } } + /** + * Return the fully-qualified "Api" name for import + * + * @param name the name of the "Api" + * @return the fully-qualified "Api" name for import + */ public String toApiImport(String name) { return apiPackage() + "." + name; } + /** + * Default constructor. + * This method will map between Swagger type and language-specified type, as well as mapping + * between Swagger type and the corresponding import statement for the language. This will + * also add some language specified CLI options, if any. + * + * @param path the path of the operation + * @param operation Swagger operation object + * @return string presentation of the example path + */ public DefaultCodegen() { defaultIncludes = new HashSet( Arrays.asList("double", @@ -355,7 +428,13 @@ public class DefaultCodegen { cliOptions.add(new CliOption(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC)); } - + /** + * Return the example path + * + * @param path the path of the operation + * @param operation Swagger operation object + * @return string presentation of the example path + */ public String generateExamplePath(String path, Operation operation) { StringBuilder sb = new StringBuilder(); sb.append(path); @@ -406,6 +485,12 @@ public class DefaultCodegen { return sb.toString(); } + /** + * Return the instantiation type of the property, especially for map and array + * + * @param p Swagger property object + * @return string presentation of the instantiation type of the property + */ public String toInstantiationType(Property p) { if (p instanceof MapProperty) { MapProperty ap = (MapProperty) p; @@ -426,6 +511,12 @@ public class DefaultCodegen { } } + /** + * Return the default value of the property + * + * @param p Swagger property object + * @return string presentation of the default value of the property + */ public String toDefaultValue(Property p) { if (p instanceof StringProperty) { return "null"; @@ -466,6 +557,8 @@ public class DefaultCodegen { /** * returns the swagger type for the property + * @param p Swagger property object + * @return string presentation of the type **/ public String getSwaggerType(Property p) { String datatype = null; @@ -511,18 +604,42 @@ public class DefaultCodegen { return datatype; } + /** + * Return the snake-case of the string + * + * @param name string to be snake-cased + * @return snake-cased string + */ public String snakeCase(String name) { return (name.length() > 0) ? (Character.toLowerCase(name.charAt(0)) + name.substring(1)) : ""; } + /** + * Capitalize the string + * + * @param name string to be capitalized + * @return capitalized string + */ public String initialCaps(String name) { return StringUtils.capitalize(name); } + /** + * Output the type declaration of a given name + * + * @param name name + * @return a string presentation of the type + */ public String getTypeDeclaration(String name) { return name; } + /** + * Output the type declaration of the property + * + * @param p Swagger Property object + * @return a string presentation of the property type + */ public String getTypeDeclaration(Property p) { String swaggerType = getSwaggerType(p); if (typeMapping.containsKey(swaggerType)) { @@ -531,6 +648,13 @@ public class DefaultCodegen { return swaggerType; } + /** + * Output the API (class) name (capitalized) ending with "Api" + * Return DefaultApi if name is empty + * + * @param name the name of the Api + * @return capitalized Api name ending with "Api" + */ public String toApiName(String name) { if (name.length() == 0) { return "DefaultApi"; @@ -538,14 +662,35 @@ public class DefaultCodegen { return initialCaps(name) + "Api"; } + /** + * Output the proper model name (capitalized) + * + * @param name the name of the model + * @return capitalized model name + */ public String toModelName(String name) { return initialCaps(name); } + /** + * Convert Swagger Model object to Codegen Model object without providing all model definitions + * + * @param name the name of the model + * @param model Swagger Model object + * @return Codegen Model object + */ public CodegenModel fromModel(String name, Model model) { return fromModel(name, model, null); } + /** + * Convert Swagger Model object to Codegen Model object + * + * @param name the name of the model + * @param model Swagger Model object + * @param allDefinitions a map of all Swagger models from the spec + * @return Codegen Model object + */ public CodegenModel fromModel(String name, Model model, Map allDefinitions) { CodegenModel m = CodegenModelFactory.newInstance(CodegenModelType.MODEL); if (reservedWords.contains(name)) { @@ -632,6 +777,12 @@ public class DefaultCodegen { return m; } + /** + * Camelize the method name of the getter and setter + * + * @param name string to be camelized + * @return Camelized string + */ public String getterAndSetterCapitalize(String name) { if (name == null || name.length() == 0) { return name; @@ -640,7 +791,14 @@ public class DefaultCodegen { return camelize(toVarName(name)); } - + + /** + * Convert Swagger Property object to Codegen Property object + * + * @param name name of the property + * @param p Swagger property object + * @return Codegen Property object + */ public CodegenProperty fromProperty(String name, Property p) { if (p == null) { LOGGER.error("unexpected missing property for name " + name); @@ -696,9 +854,10 @@ public class DefaultCodegen { property.allowableValues = allowableValues; } } - if(p instanceof IntegerProperty) { + + if (p instanceof IntegerProperty) { IntegerProperty sp = (IntegerProperty) p; - if(sp.getEnum() != null) { + if (sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = new ArrayList(); for(Integer i : _enum) { @@ -712,9 +871,10 @@ public class DefaultCodegen { property.allowableValues = allowableValues; } } - if(p instanceof LongProperty) { + + if (p instanceof LongProperty) { LongProperty sp = (LongProperty) p; - if(sp.getEnum() != null) { + if (sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = new ArrayList(); for(Long i : _enum) { @@ -728,9 +888,10 @@ public class DefaultCodegen { property.allowableValues = allowableValues; } } - if(p instanceof DoubleProperty) { + + if (p instanceof DoubleProperty) { DoubleProperty sp = (DoubleProperty) p; - if(sp.getEnum() != null) { + if (sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = new ArrayList(); for(Double i : _enum) { @@ -744,9 +905,10 @@ public class DefaultCodegen { property.allowableValues = allowableValues; } } - if(p instanceof FloatProperty) { + + if (p instanceof FloatProperty) { FloatProperty sp = (FloatProperty) p; - if(sp.getEnum() != null) { + if (sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = new ArrayList(); for(Float i : _enum) { @@ -760,9 +922,10 @@ public class DefaultCodegen { property.allowableValues = allowableValues; } } - if(p instanceof DateProperty) { + + if (p instanceof DateProperty) { DateProperty sp = (DateProperty) p; - if(sp.getEnum() != null) { + if (sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = new ArrayList(); for(String i : _enum) { @@ -776,9 +939,10 @@ public class DefaultCodegen { property.allowableValues = allowableValues; } } - if(p instanceof DateTimeProperty) { + + if (p instanceof DateTimeProperty) { DateTimeProperty sp = (DateTimeProperty) p; - if(sp.getEnum() != null) { + if (sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = new ArrayList(); for(String i : _enum) { @@ -868,10 +1032,29 @@ public class DefaultCodegen { return responses.get(code); } + /** + * Convert Swagger Operation object to Codegen Operation object (without providing a Swagger object) + * + * @param path the path of the operation + * @param httpMethod HTTP method + * @param operation Swagger operation object + * @param definitions a map of Swagger models + * @return Codegen Operation object + */ public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions) { return fromOperation(path, httpMethod, operation, definitions, null); } + /** + * Convert Swagger Operation object to Codegen Operation object + * + * @param path the path of the operation + * @param httpMethod HTTP method + * @param operation Swagger operation object + * @param definitions a map of Swagger models + * @param swagger a Swagger object representing the spec + * @return Codegen Operation object + */ public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions, Swagger swagger) { CodegenOperation op = CodegenModelFactory.newInstance(CodegenModelType.OPERATION); Set imports = new HashSet(); @@ -1119,6 +1302,13 @@ public class DefaultCodegen { return op; } + /** + * Convert Swagger Response object to Codegen Response object + * + * @param responseCode HTTP response code + * @param response Swagger Response object + * @return Codegen Response object + */ public CodegenResponse fromResponse(String responseCode, Response response) { CodegenResponse r = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE); if ("default".equals(responseCode)) { @@ -1168,7 +1358,14 @@ public class DefaultCodegen { } return r; } - + + /** + * Convert Swagger Parameter object to Codegen Parameter object + * + * @param param Swagger parameter object + * @param a set of imports for library/package/module + * @return Codegen Parameter object + */ public CodegenParameter fromParameter(Parameter param, Set imports) { CodegenParameter p = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); p.baseName = param.getName(); @@ -1314,6 +1511,12 @@ public class DefaultCodegen { return p; } + /** + * Convert map of Swagger SecuritySchemeDefinition objects to a list of Codegen Security objects + * + * @param schemes a map of Swagger SecuritySchemeDefinition object + * @return a list of Codegen Security objects + */ public List fromSecurity(Map schemes) { if (schemes == null) { return null; @@ -1372,6 +1575,12 @@ public class DefaultCodegen { return secs; } + /** + * Check the type to see if it needs import the library/module/package + * + * @param type name of the type + * @return true if the library/module/package of the corresponding type needs to be imported + */ protected boolean needToImport(String type) { return !defaultIncludes.contains(type) && !languageSpecificPrimitives.contains(type) @@ -1429,6 +1638,15 @@ public class DefaultCodegen { return objs; } + /** + * Add operation to group + * + * @param tag name of the tag + * @param resourcePath path of the resource + * @param operation Swagger Operation object + * @param co Codegen Operation object + * @param operations map of Codegen operations + */ public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { List opList = operations.get(tag); if (opList == null) { @@ -1439,9 +1657,7 @@ public class DefaultCodegen { co.baseName = tag; } - /* underscore and camelize are copied from Twitter elephant bird - * https://github.com/twitter/elephant-bird/blob/master/core/src/main/java/com/twitter/elephantbird/util/Strings.java - */ + private void addParentContainer(CodegenModel m, String name, Property property) { final CodegenProperty tmp = fromProperty(name, property); @@ -1460,6 +1676,8 @@ public class DefaultCodegen { /** * Underscore the given word. + * Copied from Twitter elephant bird + * https://github.com/twitter/elephant-bird/blob/master/core/src/main/java/com/twitter/elephantbird/util/Strings.java * * @param word The word * @return The underscored version of the word @@ -1524,12 +1742,11 @@ public class DefaultCodegen { } } - /** * Remove characters not suitable for variable or method name from the input and camelize it * - * @param name - * @return + * @param name string to be camelize + * @return camelized string */ public String removeNonNameElementToCamelCase(String name) { String nonNameElementPattern = "[-_:;#]"; @@ -1545,11 +1762,26 @@ public class DefaultCodegen { } return name; } - + + /** + * Camelize name (parameter, property, method, etc) with upper case for first letter + * copied from Twitter elephant bird + * https://github.com/twitter/elephant-bird/blob/master/core/src/main/java/com/twitter/elephantbird/util/Strings.java + * + * @param word string to be camelize + * @return camelized string + */ public static String camelize(String word) { return camelize(word, false); } + /** + * Camelize name (parameter, property, method, etc) + * + * @param word string to be camelize + * @param lowercaseFirstLetter lower case for first letter if set to true + * @return camelized string + */ public static String camelize(String word, boolean lowercaseFirstLetter) { // Replace all slashes with dots (package separator) Pattern p = Pattern.compile("\\/(.?)"); @@ -1654,7 +1886,7 @@ public class DefaultCodegen { } /** - * sanitize name (parameter, property, method, etc) + * Sanitize name (parameter, property, method, etc) * * @param name string to be sanitize * @return sanitized string From cc7105b5d8cc056ecdac0dd9fd9207db670547e7 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 26 Oct 2015 18:00:15 +0800 Subject: [PATCH 70/78] fix jarxs path with basepath --- .../io/swagger/codegen/DefaultGenerator.java | 2 + .../src/main/resources/JavaJaxRS/api.mustache | 2 +- samples/server/petstore/jaxrs/README.md | 6 ++ .../gen/java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/gen/java/io/swagger/api/PetApi.java | 57 +++++++++++++++---- .../java/io/swagger/api/PetApiService.java | 2 +- .../src/gen/java/io/swagger/api/StoreApi.java | 8 ++- .../java/io/swagger/api/StoreApiService.java | 2 +- .../src/gen/java/io/swagger/api/UserApi.java | 4 +- .../java/io/swagger/api/UserApiService.java | 2 +- .../gen/java/io/swagger/model/Category.java | 2 +- .../src/gen/java/io/swagger/model/Order.java | 2 +- .../src/gen/java/io/swagger/model/Pet.java | 2 +- .../src/gen/java/io/swagger/model/Tag.java | 2 +- .../src/gen/java/io/swagger/model/User.java | 2 +- 18 files changed, 75 insertions(+), 28 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index a95cded9c3ae..9a2a47853eab 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -163,6 +163,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } String contextPath = swagger.getBasePath() == null ? "" : swagger.getBasePath(); String basePath = hostBuilder.toString(); + String basePathWithoutHost = swagger.getBasePath(); // resolve inline models @@ -252,6 +253,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { Map operation = processOperations(config, tag, ops); operation.put("basePath", basePath); + operation.put("basePathWithoutHost", basePathWithoutHost); operation.put("contextPath", contextPath); operation.put("baseName", tag); operation.put("modelPackage", config.modelPackage()); diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache index 8bd9b2ca1083..e919fa7ce712 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache @@ -22,7 +22,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/{{baseName}}") +@Path("{{basePathWithoutHost}}/{{baseName}}") {{#hasConsumes}}@Consumes({ {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}} {{#hasProduces}}@Produces({ {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}} @io.swagger.annotations.Api(value = "/{{baseName}}", description = "the {{baseName}} API") diff --git a/samples/server/petstore/jaxrs/README.md b/samples/server/petstore/jaxrs/README.md index 3f0809d4734d..00431f63dbc9 100644 --- a/samples/server/petstore/jaxrs/README.md +++ b/samples/server/petstore/jaxrs/README.md @@ -6,3 +6,9 @@ This server was generated by the [swagger-codegen](https://github.com/swagger-ap is an example of building a swagger-enabled JAX-RS server. This example uses the [JAX-RS](https://jax-rs-spec.java.net/) framework. + +To run the server, please execute the following: + +``` +mvn clean package jetty:run +``` diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java index 63bc0707ab56..ad8ae3aff94e 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java index c26c660ecaa0..3c45b7e282f5 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java index 2df6a286eaa6..1bddb4087ae4 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java index 047c9a853793..37f7328aaf76 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java index ca7073b9cf48..260523279cda 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -22,11 +22,11 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/pet") +@Path("/v2/pet") @io.swagger.annotations.Api(value = "/pet", description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class PetApi { private final PetApiService delegate = PetApiServiceFactory.getPetApi(); @@ -35,7 +35,12 @@ public class PetApi { @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), @@ -51,7 +56,12 @@ public class PetApi { @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) @@ -63,7 +73,12 @@ public class PetApi { @Path("/findByStatus") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List") + @io.swagger.annotations.ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List", authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"), @@ -77,7 +92,12 @@ public class PetApi { @Path("/findByTags") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List") + @io.swagger.annotations.ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List", authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"), @@ -91,7 +111,9 @@ public class PetApi { @Path("/{petId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) + @io.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class, authorizations = { + @io.swagger.annotations.Authorization(value = "api_key") + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Pet.class), @@ -107,7 +129,12 @@ public class PetApi { @Path("/{petId}") @Consumes({ "application/x-www-form-urlencoded" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) @@ -121,7 +148,12 @@ public class PetApi { @Path("/{petId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value", response = Void.class) }) @@ -134,7 +166,12 @@ public class PetApi { @Path("/{petId}/uploadImage") @Consumes({ "multipart/form-data" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class) + @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { + @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), + @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") + }) + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java index 8d4eda508538..8171555b0d08 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public abstract class PetApiService { public abstract Response updatePet(Pet body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java index 8a4f9ccbf3c0..63fac7c2b34f 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -22,11 +22,11 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/store") +@Path("/v2/store") @io.swagger.annotations.Api(value = "/store", description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class StoreApi { private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); @@ -35,7 +35,9 @@ public class StoreApi { @Path("/inventory") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map") + @io.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = { + @io.swagger.annotations.Authorization(value = "api_key") + }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Integer.class, responseContainer = "Map") }) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java index 7b2b5e0a0e45..dc8274ce7399 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public abstract class StoreApiService { public abstract Response getInventory() diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java index 8cdb6579b028..cade9a3b2f16 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -22,11 +22,11 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.*; -@Path("/user") +@Path("/v2/user") @io.swagger.annotations.Api(value = "/user", description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class UserApi { private final UserApiService delegate = UserApiServiceFactory.getUserApi(); diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java index 5b79d8ed6603..175aa32757af 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -18,7 +18,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public abstract class UserApiService { public abstract Response createUser(User body) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java index f8a20404da68..9aed596a7680 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class Category { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java index 1d66b728d970..8a5c22a38ac3 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class Order { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java index 2efe19cfc2f8..f3e1cfa17f20 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class Pet { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java index 3f6a01af6195..fe723eea4d85 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class Tag { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java index d74c92a70bd0..ea890100a74f 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-20T10:58:35.558-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-10-26T17:58:55.634+08:00") public class User { private Long id = null; From 95113dbe225cc858726cf381aafab0ee988a914e Mon Sep 17 00:00:00 2001 From: xhh Date: Tue, 27 Oct 2015 10:45:23 +0800 Subject: [PATCH 71/78] Fix syntax error on authMethods in java retrofit client --- .../Java/libraries/retrofit/ApiClient.mustache | 13 +++++++------ .../src/main/java/io/swagger/client/ApiClient.java | 7 +++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache index 7488de2f49df..bf210cffc246 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache @@ -41,7 +41,7 @@ public class ApiClient { apiAuthorizations = new LinkedHashMap(); createDefaultAdapter(); } - + public ApiClient(String[] authNames) { this(); okClient = new OkHttpClient(); @@ -49,16 +49,17 @@ public class ApiClient { for(String authName : authNames) { if (apiAuthorizations.containsKey(authName)) { throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations"); - }{{#authMethods}} + }{{#hasAuthMethods}} Interceptor auth; - if (authName == "{{name}}") { {{#isBasic}} + {{#authMethods}}if (authName == "{{name}}") { {{#isBasic}} auth = new HttpBasicAuth();{{/isBasic}}{{#isApiKey}} auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}");{{/isApiKey}}{{#isOAuth}} auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{scope}}{{#hasMore}}, {{/hasMore}}{{/scopes}}");{{/isOAuth}} - } else { + } else {{^hasMore}}{ throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names"); - } - apiAuthorizations.put(authName, auth);{{/authMethods}} + }{{/hasMore}}{{/authMethods}} + apiAuthorizations.put(authName, auth);{{/hasAuthMethods}}{{^hasAuthMethods}} + throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");{{/hasAuthMethods}} } addAuthsToOkClient(okClient); } diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/ApiClient.java index 83ad22c4de8e..343e545e83d0 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/ApiClient.java @@ -41,7 +41,7 @@ public class ApiClient { apiAuthorizations = new LinkedHashMap(); createDefaultAdapter(); } - + public ApiClient(String[] authNames) { this(); okClient = new OkHttpClient(); @@ -51,11 +51,10 @@ public class ApiClient { throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations"); } Interceptor auth; - if (authName == "api_key") { - auth = new ApiKeyAuth("header", "api_key"); - } else if (authName == "petstore_auth") { auth = new OAuth(OAuthFlow.implicit, "http://petstore.swagger.io/api/oauth/dialog", "", "write:pets, read:pets"); + } else if (authName == "api_key") { + auth = new ApiKeyAuth("header", "api_key"); } else { throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names"); } From 33358d44a9a9e4ea160d741bb08227421fa07f23 Mon Sep 17 00:00:00 2001 From: xhh Date: Tue, 27 Oct 2015 11:08:37 +0800 Subject: [PATCH 72/78] Simplify tags in mustache --- .../main/resources/Java/libraries/retrofit/ApiClient.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache index bf210cffc246..eaca662c5838 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/ApiClient.mustache @@ -55,9 +55,9 @@ public class ApiClient { auth = new HttpBasicAuth();{{/isBasic}}{{#isApiKey}} auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}");{{/isApiKey}}{{#isOAuth}} auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{scope}}{{#hasMore}}, {{/hasMore}}{{/scopes}}");{{/isOAuth}} - } else {{^hasMore}}{ + } else {{/authMethods}}{ throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names"); - }{{/hasMore}}{{/authMethods}} + } apiAuthorizations.put(authName, auth);{{/hasAuthMethods}}{{^hasAuthMethods}} throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");{{/hasAuthMethods}} } From 9e791c229b9b392a6e83c863469ec0dbe8ad3e4c Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Mon, 26 Oct 2015 14:46:45 +0300 Subject: [PATCH 73/78] processOptions tests have been added for Java and JaxRS --- .../codegen/languages/JavaClientCodegen.java | 12 ++- .../swagger/codegen/AbstractOptionsTest.java | 57 +++++++++++++ .../codegen/java/JavaClientOptionsTest.java | 84 +++++++++++++++++++ .../codegen/jaxrs/JaxRSServerOptionsTest.java | 49 +++++++++++ .../swagger/generator/online/Generator.java | 4 +- 5 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/AbstractOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index 658b0ca9602a..e236b7ac4008 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory; public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(JavaClientCodegen.class); + public static final String FULL_JAVA_UTIL = "fullJavaUtil"; protected String invokerPackage = "io.swagger.client"; protected String groupId = "io.swagger"; @@ -84,7 +85,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC)); cliOptions.add(new CliOption(CodegenConstants.LOCAL_VARIABLE_PREFIX, CodegenConstants.LOCAL_VARIABLE_PREFIX_DESC)); cliOptions.add(new CliOption(CodegenConstants.SERIALIZABLE_MODEL, CodegenConstants.SERIALIZABLE_MODEL_DESC)); - cliOptions.add(new CliOption("fullJavaUtil", "whether to use fully qualified name for classes under java.util (default to false)")); + cliOptions.add(new CliOption(FULL_JAVA_UTIL, "whether to use fully qualified name for classes under java.util (default to false)")); supportedLibraries.put("", "HTTP client: Jersey client 1.18. JSON processing: Jackson 2.4.2"); supportedLibraries.put("jersey2", "HTTP client: Jersey client 2.6"); @@ -160,13 +161,13 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { // need to put back serializableModel (boolean) into additionalProperties as value in additionalProperties is string additionalProperties.put(CodegenConstants.SERIALIZABLE_MODEL, serializableModel); - if (additionalProperties.containsKey("fullJavaUtil")) { - fullJavaUtil = Boolean.valueOf(additionalProperties.get("fullJavaUtil").toString()); + if (additionalProperties.containsKey(FULL_JAVA_UTIL)) { + this.setFullJavaUtil(Boolean.valueOf(additionalProperties.get(FULL_JAVA_UTIL).toString())); } if (fullJavaUtil) { javaUtilPrefix = "java.util."; } - additionalProperties.put("fullJavaUtil", fullJavaUtil); + additionalProperties.put(FULL_JAVA_UTIL, fullJavaUtil); additionalProperties.put("javaUtilPrefix", javaUtilPrefix); if (fullJavaUtil) { @@ -582,4 +583,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { return packageName; } + public void setFullJavaUtil(boolean fullJavaUtil) { + this.fullJavaUtil = fullJavaUtil; + } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/AbstractOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/AbstractOptionsTest.java new file mode 100644 index 000000000000..8aa497417e91 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/AbstractOptionsTest.java @@ -0,0 +1,57 @@ +package io.swagger.codegen; + +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import mockit.FullVerifications; +import org.apache.commons.lang3.StringUtils; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public abstract class AbstractOptionsTest { + + @Test + public void checkOptionsProcessing() { + getCodegenConfig().additionalProperties().putAll(getAvaliableOptions()); + setExpectations(); + + getCodegenConfig().processOpts(); + + new FullVerifications() {{ + }}; + } + + @Test(description = "check if all options described in documentation are presented in test case") + public void checkOptionsHelp() { + final List cliOptions = Lists.transform(getCodegenConfig().cliOptions(), getCliOptionTransformer()); + final Set testOptions = getAvaliableOptions().keySet(); + final Set skipped = new HashSet(cliOptions); + skipped.removeAll(testOptions); + if (!skipped.isEmpty()) { + Assert.fail(String.format("These options weren't checked: %s.", StringUtils.join(skipped, ", "))); + } + final Set undocumented = new HashSet(testOptions); + undocumented.removeAll(cliOptions); + if (!undocumented.isEmpty()) { + Assert.fail(String.format("These options weren't documented: %s.", StringUtils.join(undocumented, ", "))); + } + } + + private Function getCliOptionTransformer() { + return new Function() { + public String apply(CliOption option) { + return option.getOpt(); + } + }; + } + + protected abstract CodegenConfig getCodegenConfig(); + + protected abstract void setExpectations(); + + protected abstract Map getAvaliableOptions(); +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaClientOptionsTest.java new file mode 100644 index 000000000000..9cdac7d394bf --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaClientOptionsTest.java @@ -0,0 +1,84 @@ +package io.swagger.codegen.java; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.JavaClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class JavaClientOptionsTest extends AbstractOptionsTest { + + protected static final String ARTIFACT_ID_VALUE = "swagger-java-client-test"; + protected static final String MODEL_PACKAGE_VALUE = "package"; + protected static final String API_PACKAGE_VALUE = "apiPackage"; + protected static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; + protected static final String SORT_PARAMS_VALUE = "false"; + protected static final String GROUP_ID_VALUE = "io.swagger.test"; + protected static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; + protected static final String SOURCE_FOLDER_VALUE = "src/main/java/test"; + protected static final String LOCAL_PREFIX_VALUE = "tst"; + protected static final String LIBRARY_VALUE = "jersey2"; + protected static final String SERIALIZABLE_MODEL_VALUE = "false"; + protected static final String FULL_JAVA_UTIL_VALUE = "true"; + + @Tested + private JavaClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SORT_PARAMS_VALUE)); + times = 1; + clientCodegen.setInvokerPackage(INVOKER_PACKAGE_VALUE); + times = 1; + clientCodegen.setGroupId(GROUP_ID_VALUE); + times = 1; + clientCodegen.setArtifactId(ARTIFACT_ID_VALUE); + times = 1; + clientCodegen.setArtifactVersion(ARTIFACT_VERSION_VALUE); + times = 1; + clientCodegen.setSourceFolder(SOURCE_FOLDER_VALUE); + times = 1; + clientCodegen.setLocalVariablePrefix(LOCAL_PREFIX_VALUE); + times = 1; + clientCodegen.setSerializableModel(Boolean.valueOf(SERIALIZABLE_MODEL_VALUE)); + times = 1; + clientCodegen.setLibrary(LIBRARY_VALUE); + times = 1; + clientCodegen.setFullJavaUtil(Boolean.valueOf(FULL_JAVA_UTIL_VALUE)); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) + .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) + .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE) + .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .put(CodegenConstants.LOCAL_VARIABLE_PREFIX, LOCAL_PREFIX_VALUE) + .put(CodegenConstants.SERIALIZABLE_MODEL, SERIALIZABLE_MODEL_VALUE) + .put(JavaClientCodegen.FULL_JAVA_UTIL, FULL_JAVA_UTIL_VALUE) + .put(CodegenConstants.LIBRARY, LIBRARY_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java new file mode 100644 index 000000000000..00f09ad036bc --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java @@ -0,0 +1,49 @@ +package io.swagger.codegen.jaxrs; + +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.java.JavaClientOptionsTest; +import io.swagger.codegen.languages.JaxRSServerCodegen; + +import mockit.Expectations; +import mockit.Tested; + +public class JaxRSServerOptionsTest extends JavaClientOptionsTest { + + @Tested + private JaxRSServerCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SORT_PARAMS_VALUE)); + times = 1; + clientCodegen.setInvokerPackage(INVOKER_PACKAGE_VALUE); + times = 1; + clientCodegen.setGroupId(GROUP_ID_VALUE); + times = 1; + clientCodegen.setArtifactId(ARTIFACT_ID_VALUE); + times = 1; + clientCodegen.setArtifactVersion(ARTIFACT_VERSION_VALUE); + times = 1; + clientCodegen.setSourceFolder(SOURCE_FOLDER_VALUE); + times = 1; + clientCodegen.setLocalVariablePrefix(LOCAL_PREFIX_VALUE); + times = 1; + clientCodegen.setSerializableModel(Boolean.valueOf(SERIALIZABLE_MODEL_VALUE)); + times = 1; + clientCodegen.setLibrary(LIBRARY_VALUE); + times = 1; + clientCodegen.setFullJavaUtil(Boolean.valueOf(FULL_JAVA_UTIL_VALUE)); + times = 1; + }}; + } +} diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index 6e17c38218e3..18e883effbf0 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -86,9 +86,7 @@ public class Generator { } if (opts.getOptions() != null) { - for (Map.Entry entry : opts.getOptions().entrySet()) { - codegenConfig.additionalProperties().put(entry.getKey(), entry.getValue()); - } + codegenConfig.additionalProperties().putAll(opts.getOptions()); } codegenConfig.setOutputDir(outputFolder); From 5cdee3f424898ea6cfd770ef1b3d6f6d709c6e03 Mon Sep 17 00:00:00 2001 From: Christian Stewart Date: Tue, 27 Oct 2015 17:33:57 -0400 Subject: [PATCH 74/78] Path is a commonly used variable name --- .../src/main/resources/csharp/api.mustache | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/api.mustache b/modules/swagger-codegen/src/main/resources/csharp/api.mustache index 89594091dfbc..6708fa1e16db 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/api.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/api.mustache @@ -102,7 +102,7 @@ namespace {{packageName}}.Api if ({{paramName}} == null) throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{nickname}}"); {{/required}}{{/allParams}} - var path = "{{path}}"; + var path_ = "{{path}}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -137,7 +137,7 @@ namespace {{packageName}}.Api String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content); @@ -158,7 +158,7 @@ namespace {{packageName}}.Api if ({{paramName}} == null) throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{nickname}}"); {{/required}}{{/allParams}} - var path = "{{path}}"; + var path_ = "{{path}}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -193,7 +193,7 @@ namespace {{packageName}}.Api String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content); From d907822fa9f34be6097ca058b641356ca942c58c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20J=C3=B8rgensen?= Date: Tue, 27 Oct 2015 22:56:19 +0100 Subject: [PATCH 75/78] Use CURLFile object on PHP5.5+. --- .../src/main/resources/php/api.mustache | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index db1d4c8cb4f2..78eaeb7cc6bf 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -140,7 +140,18 @@ use \{{invokerPackage}}\ObjectSerializer; }{{/pathParams}} {{#formParams}}// form params if (${{paramName}} !== null) { - $formParams['{{baseName}}'] = {{#isFile}}'@' . {{/isFile}}$this->apiClient->getSerializer()->toFormValue(${{paramName}}); + {{#isFile}} + // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax + // See: https://wiki.php.net/rfc/curl-file-upload + if (function_exists('curl_file_create')) { + $formParams['{{baseName}}'] = curl_file_create($this->apiClient->getSerializer()->toFormValue(${{paramName}})); + } else { + $formParams['{{baseName}}'] = '@' . $this->apiClient->getSerializer()->toFormValue(${{paramName}}); + } + {{/isFile}} + {{^isFile}} + $formParams['{{baseName}}'] = $this->apiClient->getSerializer()->toFormValue(${{paramName}}); + {{/isFile}} }{{/formParams}} {{#bodyParams}}// body params $_tempBody = null; From 47b2ae934bc49b687848a3767814dffab6e001fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20J=C3=B8rgensen?= Date: Tue, 27 Oct 2015 22:58:25 +0100 Subject: [PATCH 76/78] Regenerated PHP petstore sample. --- .../php/SwaggerClient-php/lib/Api/PetApi.php | 23 +++- .../php/SwaggerClient-php/lib/ApiClient.php | 89 ++++++------ .../SwaggerClient-php/lib/ApiException.php | 26 ++-- .../SwaggerClient-php/lib/Configuration.php | 128 +++++++++++------- .../lib/ObjectSerializer.php | 2 +- 5 files changed, 163 insertions(+), 105 deletions(-) diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php index cb0df4e8af0b..bcd91f4ffb8e 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php @@ -431,9 +431,6 @@ class PetApi - - //TODO support oauth - // make the API Call try { @@ -509,10 +506,16 @@ class PetApi } // form params if ($name !== null) { + + $formParams['name'] = $this->apiClient->getSerializer()->toFormValue($name); + }// form params if ($status !== null) { + + $formParams['status'] = $this->apiClient->getSerializer()->toFormValue($status); + } @@ -665,10 +668,22 @@ class PetApi } // form params if ($additional_metadata !== null) { + + $formParams['additionalMetadata'] = $this->apiClient->getSerializer()->toFormValue($additional_metadata); + }// form params if ($file !== null) { - $formParams['file'] = '@' . $this->apiClient->getSerializer()->toFormValue($file); + + // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax + // See: https://wiki.php.net/rfc/curl-file-upload + if (function_exists('curl_file_create')) { + $formParams['file'] = curl_file_create($this->apiClient->getSerializer()->toFormValue($file)); + } else { + $formParams['file'] = '@' . $this->apiClient->getSerializer()->toFormValue($file); + } + + } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php index 20150b7160bb..982b8955a15c 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php @@ -1,11 +1,11 @@ config = $config; $this->serializer = new ObjectSerializer(); } - + /** * Get the config * @return Configuration @@ -87,7 +87,7 @@ class ApiClient { return $this->config; } - + /** * Get the serializer * @return ObjectSerializer @@ -96,7 +96,7 @@ class ApiClient { return $this->serializer; } - + /** * Get API key (with prefix if set) * @param string $apiKeyIdentifier name of apikey @@ -106,20 +106,20 @@ class ApiClient { $prefix = $this->config->getApiKeyPrefix($apiKeyIdentifier); $apiKey = $this->config->getApiKey($apiKeyIdentifier); - + if (!isset($apiKey)) { return null; } - + if (isset($prefix)) { $keyWithPrefix = $prefix." ".$apiKey; } else { $keyWithPrefix = $apiKey; } - + return $keyWithPrefix; } - + /** * Make the HTTP call (Sync) * @param string $resourcePath path to method endpoint @@ -133,28 +133,28 @@ class ApiClient */ public function callApi($resourcePath, $method, $queryParams, $postData, $headerParams, $responseType=null) { - + $headers = array(); - + // construct the http header $headerParams = array_merge( - (array)$this->config->getDefaultHeaders(), + (array)$this->config->getDefaultHeaders(), (array)$headerParams ); - + foreach ($headerParams as $key => $val) { $headers[] = "$key: $val"; } - + // form data if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { $postData = http_build_query($postData); } else if ((is_object($postData) or is_array($postData)) and !in_array('Content-Type: multipart/form-data', $headers)) { // json model $postData = json_encode($this->serializer->sanitizeForSerialization($postData)); } - + $url = $this->config->getHost() . $resourcePath; - + $curl = curl_init(); // set timeout, if needed if ($this->config->getCurlTimeout() != 0) { @@ -162,13 +162,19 @@ class ApiClient } // return the result on success, rather than just TRUE curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); - + + // disable SSL verification, if needed + if ($this->config->getSSLVerification() == false) { + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); + } + if (! empty($queryParams)) { $url = ($url . '?' . http_build_query($queryParams)); } - + if ($method == self::$POST) { curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $postData); @@ -190,57 +196,62 @@ class ApiClient throw new ApiException('Method ' . $method . ' is not recognized.'); } curl_setopt($curl, CURLOPT_URL, $url); - + // Set user agent curl_setopt($curl, CURLOPT_USERAGENT, $this->config->getUserAgent()); - + // debugging for curl if ($this->config->getDebug()) { error_log("[DEBUG] HTTP Request body ~BEGIN~\n".print_r($postData, true)."\n~END~\n", 3, $this->config->getDebugFile()); - + curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_STDERR, fopen($this->config->getDebugFile(), 'a')); } else { curl_setopt($curl, CURLOPT_VERBOSE, 0); } - + // obtain the HTTP response headers curl_setopt($curl, CURLOPT_HEADER, 1); - + // Make the request $response = curl_exec($curl); $http_header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); $http_header = substr($response, 0, $http_header_size); $http_body = substr($response, $http_header_size); $response_info = curl_getinfo($curl); - + // debug HTTP response body if ($this->config->getDebug()) { error_log("[DEBUG] HTTP Response body ~BEGIN~\n".print_r($http_body, true)."\n~END~\n", 3, $this->config->getDebugFile()); } - + // Handle the response if ($response_info['http_code'] == 0) { throw new ApiException("API call to $url timed out: ".serialize($response_info), 0, null, null); } else if ($response_info['http_code'] >= 200 && $response_info['http_code'] <= 299 ) { - // return raw body if response is a file + // return raw body if response is a file if ($responseType == '\SplFileObject') { return array($http_body, $http_header); } - + $data = json_decode($http_body); if (json_last_error() > 0) { // if response is a string $data = $http_body; } } else { + $data = json_decode($http_body); + if (json_last_error() > 0) { // if response is a string + $data = $http_body; + } + throw new ApiException( "[".$response_info['http_code']."] Error connecting to the API ($url)", - $response_info['http_code'], $http_header, $http_body + $response_info['http_code'], $http_header, $data ); } return array($data, $http_header); } - + /** * Return the header 'Accept' based on an array of Accept provided * @@ -258,7 +269,7 @@ class ApiClient return implode(',', $accept); } } - + /** * Return the content type based on an array of content-type provided * diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ApiException.php b/samples/client/petstore/php/SwaggerClient-php/lib/ApiException.php index ce6c19e245f1..0b8f5892a350 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ApiException.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ApiException.php @@ -46,30 +46,30 @@ use \Exception; class ApiException extends Exception { - /** - * The HTTP body of the server response. - * @var string + /** + * The HTTP body of the server response either as Json or string. + * @var mixed */ protected $responseBody; - + /** * The HTTP header of the server response. * @var string[] */ protected $responseHeaders; - + /** * The deserialized response object * @var $responseObject; */ protected $responseObject; - + /** * Constructor * @param string $message Error message - * @param string $code HTTP status code + * @param int $code HTTP status code * @param string $responseHeaders HTTP response header - * @param string $responseBody Deseralized response object + * @param mixed $responseBody HTTP body of the server response either as Json or string */ public function __construct($message="", $code=0, $responseHeaders=null, $responseBody=null) { @@ -77,7 +77,7 @@ class ApiException extends Exception $this->responseHeaders = $responseHeaders; $this->responseBody = $responseBody; } - + /** * Gets the HTTP response header * @@ -87,17 +87,17 @@ class ApiException extends Exception { return $this->responseHeaders; } - + /** - * Gets the HTTP response body + * Gets the HTTP body of the server response either as Json or string * - * @return string HTTP response body + * @return mixed HTTP body of the server response either as Json or string */ public function getResponseBody() { return $this->responseBody; } - + /** * Sets the deseralized response object (during deserialization) * @param mixed $obj Deserialized response object diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php b/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php index fcea7100ae4f..ad715e75994e 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php @@ -27,8 +27,8 @@ */ /** - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen * Do not edit the class manually. */ @@ -48,70 +48,70 @@ class Configuration { private static $_defaultConfiguration = null; - - /** + + /** * Associate array to store API key(s) * * @var string[] */ protected $apiKeys = array(); - + /** * Associate array to store API prefix (e.g. Bearer) * * @var string[] */ protected $apiKeyPrefixes = array(); - - /** + + /** * Username for HTTP basic authentication * * @var string */ protected $username = ''; - + /** * Password for HTTP basic authentication * * @var string */ protected $password = ''; - + /** * The default instance of ApiClient * * @var \Swagger\Client\ApiClient */ protected $defaultHeaders = array(); - + /** * The host * * @var string */ protected $host = 'http://petstore.swagger.io/v2'; - + /** * Timeout (second) of the HTTP request, by default set to 0, no timeout * - * @var string + * @var string */ protected $curlTimeout = 0; - + /** * User agent of the HTTP request, set to "PHP-Swagger" by default * * @var string */ protected $userAgent = "PHP-Swagger/1.0.0"; - + /** * Debug switch (default set to false) * * @var bool */ protected $debug = false; - + /** * Debug file location (log to STDOUT by default) * @@ -126,6 +126,15 @@ class Configuration */ protected $tempFolderPath; + /** + * Indicates if SSL verification should be enabled or disabled. + * + * This is useful if the host uses a self-signed SSL certificate. + * + * @var boolean True if the certificate should be validated, false otherwise. + */ + protected $sslVerification = true; + /** * Constructor */ @@ -133,7 +142,7 @@ class Configuration { $this->tempFolderPath = sys_get_temp_dir(); } - + /** * Sets API key * @@ -147,7 +156,7 @@ class Configuration $this->apiKeys[$apiKeyIdentifier] = $key; return $this; } - + /** * Gets API key * @@ -159,7 +168,7 @@ class Configuration { return isset($this->apiKeys[$apiKeyIdentifier]) ? $this->apiKeys[$apiKeyIdentifier] : null; } - + /** * Sets the prefix for API key (e.g. Bearer) * @@ -173,7 +182,7 @@ class Configuration $this->apiKeyPrefixes[$apiKeyIdentifier] = $prefix; return $this; } - + /** * Gets API key prefix * @@ -185,7 +194,7 @@ class Configuration { return isset($this->apiKeyPrefixes[$apiKeyIdentifier]) ? $this->apiKeyPrefixes[$apiKeyIdentifier] : null; } - + /** * Sets the username for HTTP basic authentication * @@ -198,7 +207,7 @@ class Configuration $this->username = $username; return $this; } - + /** * Gets the username for HTTP basic authentication * @@ -208,7 +217,7 @@ class Configuration { return $this->username; } - + /** * Sets the password for HTTP basic authentication * @@ -221,7 +230,7 @@ class Configuration $this->password = $password; return $this; } - + /** * Gets the password for HTTP basic authentication * @@ -231,7 +240,7 @@ class Configuration { return $this->password; } - + /** * Adds a default header * @@ -245,11 +254,11 @@ class Configuration if (!is_string($headerName)) { throw new \InvalidArgumentException('Header name must be a string.'); } - + $this->defaultHeaders[$headerName] = $headerValue; return $this; } - + /** * Gets the default header * @@ -259,7 +268,7 @@ class Configuration { return $this->defaultHeaders; } - + /** * Deletes a default header * @@ -271,7 +280,7 @@ class Configuration { unset($this->defaultHeaders[$headerName]); } - + /** * Sets the host * @@ -284,7 +293,7 @@ class Configuration $this->host = $host; return $this; } - + /** * Gets the host * @@ -294,7 +303,7 @@ class Configuration { return $this->host; } - + /** * Sets the user agent of the api client * @@ -307,11 +316,11 @@ class Configuration if (!is_string($userAgent)) { throw new \InvalidArgumentException('User-agent must be a string.'); } - + $this->userAgent = $userAgent; return $this; } - + /** * Gets the user agent of the api client * @@ -321,7 +330,7 @@ class Configuration { return $this->userAgent; } - + /** * Sets the HTTP timeout value * @@ -334,11 +343,11 @@ class Configuration if (!is_numeric($seconds) || $seconds < 0) { throw new \InvalidArgumentException('Timeout value must be numeric and a non-negative number.'); } - + $this->curlTimeout = $seconds; return $this; } - + /** * Gets the HTTP timeout value * @@ -348,10 +357,10 @@ class Configuration { return $this->curlTimeout; } - + /** * Sets debug flag - * + * * @param bool $debug Debug flag * * @return Configuration @@ -361,7 +370,7 @@ class Configuration $this->debug = $debug; return $this; } - + /** * Gets the debug flag * @@ -371,7 +380,7 @@ class Configuration { return $this->debug; } - + /** * Sets the debug file * @@ -384,7 +393,7 @@ class Configuration $this->debugFile = $debugFile; return $this; } - + /** * Gets the debug file * @@ -394,7 +403,7 @@ class Configuration { return $this->debugFile; } - + /** * Sets the temp folder path * @@ -407,7 +416,7 @@ class Configuration $this->tempFolderPath = $tempFolderPath; return $this; } - + /** * Gets the temp folder path * @@ -417,7 +426,30 @@ class Configuration { return $this->tempFolderPath; } - + + /** + * Sets if SSL verification should be enabled or disabled + * + * @param boolean $sslVerification True if the certificate should be validated, false otherwise + * + * @return Configuration + */ + public function setSSLVerification($sslVerification) + { + $this->sslVerification = $sslVerification; + return $this; + } + + /** + * Gets if SSL verification should be enabled or disabled + * + * @return boolean True if the certificate should be validated, false otherwise + */ + public function getSSLVerification() + { + return $this->sslVerification; + } + /** * Gets the default configuration instance * @@ -428,10 +460,10 @@ class Configuration if (self::$_defaultConfiguration == null) { self::$_defaultConfiguration = new Configuration(); } - + return self::$_defaultConfiguration; } - + /** * Sets the detault configuration instance * @@ -443,7 +475,7 @@ class Configuration { self::$_defaultConfiguration = $config; } - + /** * Gets the essential information for debugging * @@ -457,8 +489,8 @@ class Configuration $report .= " Swagger Spec Version: 1.0.0\n"; $report .= " SDK Package Version: 1.0.0\n"; $report .= " Temp Folder Path: ".self::getDefaultConfiguration()->getTempFolderPath()."\n"; - + return $report; } - + } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index 0d281b9d1fa3..efdc1c896ab4 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -193,7 +193,7 @@ class ObjectSerializer $deserialized = $values; } elseif ($class === '\DateTime') { $deserialized = new \DateTime($data); - } elseif (in_array($class, array('integer', 'int', 'void', 'number', 'object', 'double', 'float', 'byte', 'DateTime', 'string', 'mixed', 'boolean', 'bool'))) { + } elseif (in_array($class, array('void', 'bool', 'string', 'double', 'byte', 'mixed', 'integer', 'float', 'int', 'DateTime', 'number', 'boolean', 'object'))) { settype($data, $class); $deserialized = $data; } elseif ($class === '\SplFileObject') { From 55d69d80bcff94fbd3359638f13a0ff2127832e7 Mon Sep 17 00:00:00 2001 From: wing328 Date: Wed, 28 Oct 2015 15:33:56 +0800 Subject: [PATCH 77/78] update c# sample code --- .../src/main/csharp/IO/Swagger/Api/PetApi.cs | 80 +++++++++--------- .../main/csharp/IO/Swagger/Api/StoreApi.cs | 44 +++++----- .../src/main/csharp/IO/Swagger/Api/UserApi.cs | 72 ++++++++-------- .../csharp/IO/Swagger/Client/ApiClient.cs | 27 +++--- .../bin/Debug/SwaggerClientTest.dll | Bin 61952 -> 61952 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 18987 -> 18999 bytes .../obj/Debug/SwaggerClientTest.dll | Bin 61952 -> 61952 bytes .../obj/Debug/SwaggerClientTest.dll.mdb | Bin 18987 -> 18999 bytes 8 files changed, 113 insertions(+), 110 deletions(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs index 4e7e84fb7251..00bd7a5e9f2e 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs @@ -248,7 +248,7 @@ namespace IO.Swagger.Api { - var path = "/pet"; + var path_ = "/pet"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -279,7 +279,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UpdatePet: " + response.Content, response.Content); @@ -298,7 +298,7 @@ namespace IO.Swagger.Api { - var path = "/pet"; + var path_ = "/pet"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -329,7 +329,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UpdatePet: " + response.Content, response.Content); @@ -346,7 +346,7 @@ namespace IO.Swagger.Api { - var path = "/pet"; + var path_ = "/pet"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -377,7 +377,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling AddPet: " + response.Content, response.Content); @@ -396,7 +396,7 @@ namespace IO.Swagger.Api { - var path = "/pet"; + var path_ = "/pet"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -427,7 +427,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling AddPet: " + response.Content, response.Content); @@ -444,7 +444,7 @@ namespace IO.Swagger.Api { - var path = "/pet/findByStatus"; + var path_ = "/pet/findByStatus"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -475,14 +475,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByStatus: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByStatus: " + response.ErrorMessage, response.ErrorMessage); - return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + return (List) ApiClient.Deserialize(response, typeof(List)); } /// @@ -494,7 +494,7 @@ namespace IO.Swagger.Api { - var path = "/pet/findByStatus"; + var path_ = "/pet/findByStatus"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -525,11 +525,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByStatus: " + response.Content, response.Content); - return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + return (List) ApiClient.Deserialize(response, typeof(List)); } /// @@ -541,7 +541,7 @@ namespace IO.Swagger.Api { - var path = "/pet/findByTags"; + var path_ = "/pet/findByTags"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -572,14 +572,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByTags: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByTags: " + response.ErrorMessage, response.ErrorMessage); - return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + return (List) ApiClient.Deserialize(response, typeof(List)); } /// @@ -591,7 +591,7 @@ namespace IO.Swagger.Api { - var path = "/pet/findByTags"; + var path_ = "/pet/findByTags"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -622,11 +622,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByTags: " + response.Content, response.Content); - return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + return (List) ApiClient.Deserialize(response, typeof(List)); } /// @@ -641,7 +641,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling GetPetById"); - var path = "/pet/{petId}"; + var path_ = "/pet/{petId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -669,17 +669,17 @@ namespace IO.Swagger.Api // authentication setting, if any - String[] authSettings = new String[] { "api_key", "petstore_auth" }; + String[] authSettings = new String[] { "api_key" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetPetById: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling GetPetById: " + response.ErrorMessage, response.ErrorMessage); - return (Pet) ApiClient.Deserialize(response.Content, typeof(Pet), response.Headers); + return (Pet) ApiClient.Deserialize(response, typeof(Pet)); } /// @@ -693,7 +693,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling GetPetById"); - var path = "/pet/{petId}"; + var path_ = "/pet/{petId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -721,14 +721,14 @@ namespace IO.Swagger.Api // authentication setting, if any - String[] authSettings = new String[] { "api_key", "petstore_auth" }; + String[] authSettings = new String[] { "api_key" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetPetById: " + response.Content, response.Content); - return (Pet) ApiClient.Deserialize(response.Content, typeof(Pet), response.Headers); + return (Pet) ApiClient.Deserialize(response, typeof(Pet)); } /// @@ -745,7 +745,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling UpdatePetWithForm"); - var path = "/pet/{petId}"; + var path_ = "/pet/{petId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -778,7 +778,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UpdatePetWithForm: " + response.Content, response.Content); @@ -801,7 +801,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling UpdatePetWithForm"); - var path = "/pet/{petId}"; + var path_ = "/pet/{petId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -834,7 +834,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UpdatePetWithForm: " + response.Content, response.Content); @@ -855,7 +855,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling DeletePet"); - var path = "/pet/{petId}"; + var path_ = "/pet/{petId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -887,7 +887,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling DeletePet: " + response.Content, response.Content); @@ -909,7 +909,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling DeletePet"); - var path = "/pet/{petId}"; + var path_ = "/pet/{petId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -941,7 +941,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling DeletePet: " + response.Content, response.Content); @@ -963,7 +963,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling UploadFile"); - var path = "/pet/{petId}/uploadImage"; + var path_ = "/pet/{petId}/uploadImage"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -996,7 +996,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UploadFile: " + response.Content, response.Content); @@ -1019,7 +1019,7 @@ namespace IO.Swagger.Api if (petId == null) throw new ApiException(400, "Missing required parameter 'petId' when calling UploadFile"); - var path = "/pet/{petId}/uploadImage"; + var path_ = "/pet/{petId}/uploadImage"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -1052,7 +1052,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "petstore_auth" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UploadFile: " + response.Content, response.Content); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs index f96b773c76f9..b0a439ddf1a9 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs @@ -155,7 +155,7 @@ namespace IO.Swagger.Api { - var path = "/store/inventory"; + var path_ = "/store/inventory"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -185,14 +185,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "api_key" }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetInventory: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling GetInventory: " + response.ErrorMessage, response.ErrorMessage); - return (Dictionary) ApiClient.Deserialize(response.Content, typeof(Dictionary), response.Headers); + return (Dictionary) ApiClient.Deserialize(response, typeof(Dictionary)); } /// @@ -203,7 +203,7 @@ namespace IO.Swagger.Api { - var path = "/store/inventory"; + var path_ = "/store/inventory"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -233,11 +233,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { "api_key" }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetInventory: " + response.Content, response.Content); - return (Dictionary) ApiClient.Deserialize(response.Content, typeof(Dictionary), response.Headers); + return (Dictionary) ApiClient.Deserialize(response, typeof(Dictionary)); } /// @@ -249,7 +249,7 @@ namespace IO.Swagger.Api { - var path = "/store/order"; + var path_ = "/store/order"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -280,14 +280,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling PlaceOrder: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling PlaceOrder: " + response.ErrorMessage, response.ErrorMessage); - return (Order) ApiClient.Deserialize(response.Content, typeof(Order), response.Headers); + return (Order) ApiClient.Deserialize(response, typeof(Order)); } /// @@ -299,7 +299,7 @@ namespace IO.Swagger.Api { - var path = "/store/order"; + var path_ = "/store/order"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -330,11 +330,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling PlaceOrder: " + response.Content, response.Content); - return (Order) ApiClient.Deserialize(response.Content, typeof(Order), response.Headers); + return (Order) ApiClient.Deserialize(response, typeof(Order)); } /// @@ -349,7 +349,7 @@ namespace IO.Swagger.Api if (orderId == null) throw new ApiException(400, "Missing required parameter 'orderId' when calling GetOrderById"); - var path = "/store/order/{orderId}"; + var path_ = "/store/order/{orderId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -380,14 +380,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetOrderById: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling GetOrderById: " + response.ErrorMessage, response.ErrorMessage); - return (Order) ApiClient.Deserialize(response.Content, typeof(Order), response.Headers); + return (Order) ApiClient.Deserialize(response, typeof(Order)); } /// @@ -401,7 +401,7 @@ namespace IO.Swagger.Api if (orderId == null) throw new ApiException(400, "Missing required parameter 'orderId' when calling GetOrderById"); - var path = "/store/order/{orderId}"; + var path_ = "/store/order/{orderId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -432,11 +432,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetOrderById: " + response.Content, response.Content); - return (Order) ApiClient.Deserialize(response.Content, typeof(Order), response.Headers); + return (Order) ApiClient.Deserialize(response, typeof(Order)); } /// @@ -451,7 +451,7 @@ namespace IO.Swagger.Api if (orderId == null) throw new ApiException(400, "Missing required parameter 'orderId' when calling DeleteOrder"); - var path = "/store/order/{orderId}"; + var path_ = "/store/order/{orderId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -482,7 +482,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling DeleteOrder: " + response.Content, response.Content); @@ -503,7 +503,7 @@ namespace IO.Swagger.Api if (orderId == null) throw new ApiException(400, "Missing required parameter 'orderId' when calling DeleteOrder"); - var path = "/store/order/{orderId}"; + var path_ = "/store/order/{orderId}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -534,7 +534,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling DeleteOrder: " + response.Content, response.Content); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs index f7c68cfbe35d..b4c8d93c28c9 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs @@ -240,7 +240,7 @@ namespace IO.Swagger.Api { - var path = "/user"; + var path_ = "/user"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -271,7 +271,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling CreateUser: " + response.Content, response.Content); @@ -290,7 +290,7 @@ namespace IO.Swagger.Api { - var path = "/user"; + var path_ = "/user"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -321,7 +321,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling CreateUser: " + response.Content, response.Content); @@ -338,7 +338,7 @@ namespace IO.Swagger.Api { - var path = "/user/createWithArray"; + var path_ = "/user/createWithArray"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -369,7 +369,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling CreateUsersWithArrayInput: " + response.Content, response.Content); @@ -388,7 +388,7 @@ namespace IO.Swagger.Api { - var path = "/user/createWithArray"; + var path_ = "/user/createWithArray"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -419,7 +419,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling CreateUsersWithArrayInput: " + response.Content, response.Content); @@ -436,7 +436,7 @@ namespace IO.Swagger.Api { - var path = "/user/createWithList"; + var path_ = "/user/createWithList"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -467,7 +467,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling CreateUsersWithListInput: " + response.Content, response.Content); @@ -486,7 +486,7 @@ namespace IO.Swagger.Api { - var path = "/user/createWithList"; + var path_ = "/user/createWithList"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -517,7 +517,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling CreateUsersWithListInput: " + response.Content, response.Content); @@ -535,7 +535,7 @@ namespace IO.Swagger.Api { - var path = "/user/login"; + var path_ = "/user/login"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -567,14 +567,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling LoginUser: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling LoginUser: " + response.ErrorMessage, response.ErrorMessage); - return (string) ApiClient.Deserialize(response.Content, typeof(string), response.Headers); + return (string) ApiClient.Deserialize(response, typeof(string)); } /// @@ -587,7 +587,7 @@ namespace IO.Swagger.Api { - var path = "/user/login"; + var path_ = "/user/login"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -619,11 +619,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling LoginUser: " + response.Content, response.Content); - return (string) ApiClient.Deserialize(response.Content, typeof(string), response.Headers); + return (string) ApiClient.Deserialize(response, typeof(string)); } /// @@ -634,7 +634,7 @@ namespace IO.Swagger.Api { - var path = "/user/logout"; + var path_ = "/user/logout"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -664,7 +664,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling LogoutUser: " + response.Content, response.Content); @@ -682,7 +682,7 @@ namespace IO.Swagger.Api { - var path = "/user/logout"; + var path_ = "/user/logout"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -712,7 +712,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling LogoutUser: " + response.Content, response.Content); @@ -732,7 +732,7 @@ namespace IO.Swagger.Api if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling GetUserByName"); - var path = "/user/{username}"; + var path_ = "/user/{username}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -763,14 +763,14 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetUserByName: " + response.Content, response.Content); else if (((int)response.StatusCode) == 0) throw new ApiException ((int)response.StatusCode, "Error calling GetUserByName: " + response.ErrorMessage, response.ErrorMessage); - return (User) ApiClient.Deserialize(response.Content, typeof(User), response.Headers); + return (User) ApiClient.Deserialize(response, typeof(User)); } /// @@ -784,7 +784,7 @@ namespace IO.Swagger.Api if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling GetUserByName"); - var path = "/user/{username}"; + var path_ = "/user/{username}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -815,11 +815,11 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling GetUserByName: " + response.Content, response.Content); - return (User) ApiClient.Deserialize(response.Content, typeof(User), response.Headers); + return (User) ApiClient.Deserialize(response, typeof(User)); } /// @@ -835,7 +835,7 @@ namespace IO.Swagger.Api if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling UpdateUser"); - var path = "/user/{username}"; + var path_ = "/user/{username}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -867,7 +867,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UpdateUser: " + response.Content, response.Content); @@ -889,7 +889,7 @@ namespace IO.Swagger.Api if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling UpdateUser"); - var path = "/user/{username}"; + var path_ = "/user/{username}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -921,7 +921,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling UpdateUser: " + response.Content, response.Content); @@ -941,7 +941,7 @@ namespace IO.Swagger.Api if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling DeleteUser"); - var path = "/user/{username}"; + var path_ = "/user/{username}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -972,7 +972,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) ApiClient.CallApi(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling DeleteUser: " + response.Content, response.Content); @@ -993,7 +993,7 @@ namespace IO.Swagger.Api if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling DeleteUser"); - var path = "/user/{username}"; + var path_ = "/user/{username}"; var pathParams = new Dictionary(); var queryParams = new Dictionary(); @@ -1024,7 +1024,7 @@ namespace IO.Swagger.Api String[] authSettings = new String[] { }; // make the HTTP request - IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); + IRestResponse response = (IRestResponse) await ApiClient.CallApiAsync(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings); if (((int)response.StatusCode) >= 400) throw new ApiException ((int)response.StatusCode, "Error calling DeleteUser: " + response.Content, response.Content); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 74b898be6260..0416f985360c 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -214,12 +214,14 @@ namespace IO.Swagger.Client /// /// Deserialize the JSON string into a proper object. /// - /// HTTP body (e.g. string, JSON). + /// The HTTP response. /// Object type. - /// /// Object representation of the JSON string. - public object Deserialize(string content, Type type, IList headers=null) + public object Deserialize(IRestResponse response, Type type) { + byte[] data = response.RawBytes; + string content = response.Content; + IList headers = response.Headers; if (type == typeof(Object)) // return an object { return content; @@ -227,21 +229,22 @@ namespace IO.Swagger.Client if (type == typeof(Stream)) { - var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath) - ? Path.GetTempPath() - : Configuration.TempFolderPath; - - var fileName = filePath + Guid.NewGuid(); if (headers != null) { + var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath) + ? Path.GetTempPath() + : Configuration.TempFolderPath; var regex = new Regex(@"Content-Disposition:.*filename=['""]?([^'""\s]+)['""]?$"); var match = regex.Match(headers.ToString()); if (match.Success) - fileName = filePath + match.Value.Replace("\"", "").Replace("'", ""); + { + string fileName = filePath + match.Value.Replace("\"", "").Replace("'", ""); + File.WriteAllBytes(fileName, data); + return new FileStream(fileName, FileMode.Open); + } } - File.WriteAllText(fileName, content); - return new FileStream(fileName, FileMode.Open); - + var stream = new MemoryStream(data); + return stream; } if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index 74b5b6455e3f793db9f44be0d3daedbfed1a907d..3541160c3b9ace66ad275322526c3a6d0c45eb8a 100755 GIT binary patch delta 17184 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 delta 17408 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 ZyZb_Y)cyHCOj4vE>ig4|Vtt7 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 F{y+8>VkH0o literal 18987 zcmdU133wA#*FKX;o1|&bBrQuQEp(w!poO#)ND636QK~F0(AovMrlqADZ3>h{rKRlq zz9}cDbzRbJLle+d*<9TcV=>L zbX)SqJ)g#BBaI~fo8;DY%gXadqSn5+dT6~j+o_vH5f!3nZ3iL^cv}~ueqg2(ZTbgj zpN>RrT_9}#*naHa1N>8hRl*k03@)g5v8AXuXi#=;Zgy&3dOu5kR!~Gih9#(YP-<3| zrKm+ZHnJ@FLB*+gg}IjEp!D2qOTIOz&|)pN78F^6(u@1078M5d6st!FrM)c0)}U9j z(;Tfq#YO2sd8yg?_IPZAbkci_UQM%VlG{C57^-&s-4~5BODhs)O&&6R;OgP3u{5(LInH{%YQKMe zIeCm?>$U?auA3fQx_a$4&8sPXi}}UUMO0N}OZklvx@}7is+PpHy*ql!g%0#~&2v6- zaJr??nq81zh5rvWJ{RvKKYj4!Uyhf&8R1l)7Su5RBMR~}v$INyQmZ+E1};hc=6rRr z^`7nz+(O65{Ao^2If1Si%W{JvQmvM(f}+wYV!v$H*lp)`uAj5pXWp%Ew$0vNb1qoX z_3lL(mZB>BR}|yU_HS6><#iRe0TJdm3jkI_KQ@?BdCZN1H9K zXBT9Av^*O_ z8UKH`es=$_y33!Rkl14!J;=b0?F8yv>@lPD5*O^$UN~7~oalh;7to{#M;cu+am@X97 z^HFgl-KfHCl$&_qiyVgnKW?ELEpmI$!5F};ccTq%8(~zFyfD?;k2n`bJyMHO^NL{| zP+}=6wQcdP{Vb^%P;8rWm&}5qJllqoOJ;Vi#kS$BEG#Ith8JX%l0x6lYAs9_cT7%A zXZNvUQtBSHlFBu;#M-Z?#cIvY&nhMtWs#-0upqzK!lHAF&eVCLZeFgT+>n!FG#e5bg^4lp^lIqosnKYf25Yp$mCP5Wyfs9obja!mF=3`th05R$CdSwv3MraN`+ z){!D|vM!yf`%B##ACXV_Dk2hM3O5;fh0KY2G*xur(~Q%FtLD*kX=ILUVNaL=<(v?n z0b`Ic4LfE8sJP2@X@X&*L5k7H`czSWRQ(zsqqpS$!x(wBd9j&2Mg_Q<*i}_9N{Z2p z`n1|(jfWJYWesR~gAW?i_!!+ojLH()KQi6~=Y*#jc_mV5?<1qm!&GY6So3H$HEbI$ zMXLXBAyECx5GX^t*L+pn#s+lA^RTBBsDobgt=D&6H9k;hoH%z=Re@sHT&O9^WDI5> zZ63Yy#6i0HPeSqxUPU9t^eP%F4BDr>=w8G74W)>cd(%ko3hx>pvG1H8 zlUl7=*xLU4U^Qz0QlLFfj`z0d-n7bRwT~304}58b?}xrMK1^E`j|r1KvC{sV#A*?f z)K(*8m+fJo^3|x~Hv7^MzwiB|fE{m4KQ{iUv9K+d@i|pI#>vh#rt^(2NOcDO<2gg=ktUn%-(gD`8vC^PgAs`pYkBMentG zU#hhGpD)1t&Q|nwt6frs!;S+df3_9<(dtjB_=MxY$&WVD7~@!@-3PoQv)5pLiIJ8X zm;J*Wz;7|q=f>3A_J zrBj5cJP4)vZQp7uMWv!0jcPZ#-7^rCS=GJ*2TR`-JeoF-dj|38*d<6Kd{prbQ-iR+ z{wjWEJ6dD<*d&GP6Em$duQxvf;ksQ_xT?9&R+mLpJ!|vZ&2%#CRG1W!o$cxC_Pg3Y z10gy3xcA;_Lh~?xe41AA2;$S>W$7I*|4s2q%dfzdR^OE1r{ceFPuDtJ?;yqMT1UFx z@kYmIAXZ!P##`+($m7PM>cdp^bFGRme}Ue4@!c1tAk7JO9 z#A~hkC{=mQEeogZ5j!HJ5PjN-KI^olldvt9^X{B31+x&r2BR<$Vd#Rn3Verd(5U2l zI?*?s_DVJV*wd7^{6;6b+3A*})n7h7k|sn>jIHNk zi>!8)u{AQ!xutPj;|Niwt>idJ(YjJbLw~blRTk6I&peKn5nhSlx8q{ha0VbWxi5jLwX$6%MJ;2@3R z!XI{S9}yGw3Ie0j)JLxd1h@xiTXm`z5TNn)cK6mcZ&T0PTa-;hB-tuVl9ej>w`kX~ zYtQs-R;I0o?AY3w%3k{EC6dW1#kBGa4o+q;rym!lGnp~TWsr4rF$PE2eDUztG}UOD zwAA20)4R~}E+2HUC#d|#F7#8E6XG_Gu?P?OQDWwMspRLo(1k7+rNR%{8-O?qW>U$= zM$x#a@lp29-+;n&Lz>Z;VMq|`XiWv(8f#6BRq`cKv@~iNs`4^TW^St0YRT_uEy6Su z$E%7hEEBM3hm(taE|YUYpSN7X$+-6TK1S9fhvVb3S$|=kPoF*{Jxy;m>r6R@aJ_eb z{ys|(8P6%Z8p16$_q0uPzFMs|FwhVf?A}}(s5Lj%HdM(EM$yfviLVg8VOEOsY1V!+ znIOBR=2>LCQxO(d4d&%ed8yX)e!LTBQ7A-jYI}+td=L)he8!1ezj60%YME@kOth_+ zZMUiIvSTvlHJe*ZOVmdK#>B)h-FUMevuVZ%L!x(CSvngIGIa@w`tXTqX&^(E-jGpW zA8rg2x=*WNe-Zv3e%h8=t$QQ)*8c8Z^;(;|YB9-KS5v#bM%zfEZP{9b4Xv+6qYbK~ zk{^48M!vf3Rgz)8%_6h8!x=;e4K0{cQ)Qf+K758=Z?ZRJwC((5SK8V2XjhhN>eRyQ zS1hHmsktQ<;#|e89z~YS?7^5dWcecF^yVnDIV$ljG21kl1#GU>s^ky4(%an@bb|{d zXA_T{+;%DB`#H|j%E`QoIo_w39b_#IGBiXN)6892l4A^M6B@#w7djOey1Pun#u`lN zYW!;BS_t;5SFfJNPbJ^cjrMjsjpK`s9L6zTi7*)x(@iYo&|C12c~mULg* zojIbkS_WIgORa3m6YZYHJ|?r6GOa>2J}UXX?({?VbM&W@RmYF*A zj-g*;&ae{OmE~HO6saJg;z3xOmrZtZ?yd5CE-pQq1m6Z}(n+-NikPxb?9s z#Y16mQXJ_`-}gQ$mcgdH+MBNRzHY0lw4H*oESAb+N5+aruvtBnb7E<3>^#XTo`P~^ zEUk)N?P&EClu z5Uh=rZ^hBuaSJ4COYyiL$I;rjPaLg{lwZfuuDIQjwGFG=KzSmLevUioX!TZJkE0uL zH(`}RuH-vb4!IEbhaap5guZyB8~i+*D_oj1GTJ^Gdj;AQx<)zfHJb9;)Yt4M6<4Wi zlviG(tFK)X%iyVMVmwWXpByjNRoS{m^>#chh=0e?>Y-X2PoKoEldMA5G*s=1r`_>; z9Ibw;pX2Fd{3*#Qbd5oEBc5)?-*U8ism3SJgoKF+b{~XJ@KY^JphXGqIa&i$8xm+^ z!Y0WYB!pYFH-Yvg?02+!t4=4-uL)-)tI#zbs@n;4C*iK6wUKIaB27u0npml8RE}LE z^hFgPk93XDE5c>c)H}p>!3h0>u2C&cq!o!Dq8WD8sQAiVqneOJ6O$$-31#RSmt{$` zJm~{*Tkc}(8kdbpv?*z`qt(M@UlQ$4Iv`oatH$NmBs!Dyo1@jsNgyXvb~B-4k1gsXN2`zeLNZ-Uz9duefoi$2jae;k2@X@so2%vCC~ETpyxy2jhtdzj8QDW;{^12Wo_X=_d@ww< z2Rkz8hm7MHkMkgdc~Ddq0w;oTy1E2gID}ZRlee9?uUgL9#rfgngVge-YPoRoI9uLz zr-gpB{A6)xM_8_icRWjKo|p>*(NdTxY+maj_F#J8fY^IgCViE;Gm~WUhjDT#wx(K3 zieJsfHwQ9BE(pt4k!eUSju&4eds~_#| zw?}LRdvU9>X?6CRY+I}2`TupRSj&i3w`S9SvcC{pVXZFCp(Qy>b8M|%cucDyX*gwJ z#bBi~4l|{FY*dba+*yk&2HAPD^@6r_g6nc46ZWW$paI_RIkdjLK39q^xk8+0A~WJ>|K zLpKNe0=1!E1h)g~KzG7#y8eK!3*8Gk8mI>yiywOZ4Q+tVgiZ(QLl434>}vrY(Br_P zfdcwLgAW41(09O>fe>gdf}{Xi zLpMN>HbI9%w}1`++CZBSu*1-8p`)N*0@^`a5WK69ABESqi27znfCEy|;4tgj$ssZpC^my5?*{rn|AEdd z0s2DU2Hymdp=+Tt7ou}hpgp1M1F6uh(6L`Zr$N66-2q64?hoz;WI&Gq4+bzbd>f1-%Wt8NmPI!TBff0U#Ut8u(8j2U>;1Vad}U+6!D8$c1hVZVu!@k3~YA zfX;{h7J3Cx0R0R2XP^-J0r(Oy0NMjd=L!@-zXWay6hrR^PXesa8)JOx)v}Bx&_!5 z7!4f(HUVRxXkT!B zU=Fki+zOZr-2?m*Fb_Ht+y|HsJq%n7yahcCJQjExdKvf~U;*^!;B{;p8q3XT5AZJZ zpWsu#LTGAEbPIYBbQZJ@cn`W9Yz5wjo(`S@EQVeVeiv8*y%oG3SPFd@{0*=S`W*Nd zU^z6`0_zL-KHeqTWG&vj9t** zL8n8%3><>~1-t|}41E=R2{;1XF$8`B-$O43zX}|MUI+ddI0jw6HDUw(19UU!Ccts% zMc}r;kI)~3R{=jkHw{I+p-(`!gAN6LhF%Bm44j1C0say=1s&A}zC-^4od6vNoQ6IG z&H{dg{uO)*I0N0UEzuR|-=GIWmjJ&*{|>GI&O+Y;UkCnx&T5AjL*P&7L0~Iz4*CXo zByb+u$wVXrEwt^Uz+-{C(DDu#pP>JS zc7xUe_n^mt8v*yB=YeMf51}GG!K|HeVAjq=Fl%QDn6)z}z->AJ diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll index 74b5b6455e3f793db9f44be0d3daedbfed1a907d..3541160c3b9ace66ad275322526c3a6d0c45eb8a 100755 GIT binary patch delta 17184 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 delta 17408 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 ZyZb_Y)cyHCOj4vE>ig4|Vtt7 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 F{y+8>VkH0o literal 18987 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 From 6008664ff8370dfc864367a83039b480542db381 Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Tue, 27 Oct 2015 16:38:18 +0300 Subject: [PATCH 78/78] processOptions tests have been added for Android, Ruby, nodeJS, php, python, csharp, CsharpDotNet2, dart, flash --- .../io/swagger/codegen/CodegenConstants.java | 2 + .../io/swagger/codegen/DefaultCodegen.java | 3 +- .../languages/AndroidClientCodegen.java | 12 +-- .../languages/CSharpClientCodegen.java | 24 ++++-- .../languages/CsharpDotNet2ClientCodegen.java | 34 ++++++--- .../codegen/languages/DartClientCodegen.java | 44 ++++++----- .../codegen/languages/FlashClientCodegen.java | 58 ++++++++------ .../codegen/languages/JavaClientCodegen.java | 2 +- .../codegen/languages/PhpClientCodegen.java | 57 +++++++------- .../languages/PythonClientCodegen.java | 18 +++-- .../codegen/languages/RubyClientCodegen.java | 27 ++++--- .../android/AndroidClientOptionsTest.java | 71 ++++++++++++++++++ .../csharp/CSharpClientOptionsTest.java | 43 +++++++++++ .../CsharpDotNet2ClientOptionsTest.java | 47 ++++++++++++ .../codegen/dart/DartClientOptionsTest.java | 68 +++++++++++++++++ .../codegen/flash/FlashClienOptionsTest.java | 51 +++++++++++++ .../nodejs/NodeJSServerOptionsTest.java | 48 ++++++++++++ .../codegen/php/PhpClientOptionsTest.java | 75 +++++++++++++++++++ .../python/PythonClientOptionsTest.java | 43 +++++++++++ .../codegen/ruby/RubyClientOptionsTest.java | 46 ++++++++++++ 20 files changed, 657 insertions(+), 116 deletions(-) create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/android/AndroidClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/csharpdotnettwo/CsharpDotNet2ClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/flash/FlashClienOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/ruby/RubyClientOptionsTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index b2ada4a19812..62659530a82f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -40,4 +40,6 @@ public class CodegenConstants { public static final String SORT_PARAMS_BY_REQUIRED_FLAG = "sortParamsByRequiredFlag"; public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters. Default: true"; + public static final String PACKAGE_NAME = "packageName"; + public static final String PACKAGE_VERSION = "packageVersion"; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index eb77efa3456e..6085aee77818 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -105,7 +105,8 @@ public class DefaultCodegen { } if (additionalProperties.containsKey(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG)) { - this.setSortParamsByRequiredFlag(Boolean.valueOf((String)additionalProperties.get(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG).toString())); + this.setSortParamsByRequiredFlag(Boolean.valueOf(additionalProperties + .get(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG).toString())); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java index 9c55053e59cd..aeb731367764 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidClientCodegen.java @@ -17,6 +17,7 @@ import java.util.HashSet; import org.apache.commons.lang.StringUtils; public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfig { + public static final String USE_ANDROID_MAVEN_GRADLE_PLUGIN = "useAndroidMavenGradlePlugin"; protected String invokerPackage = "io.swagger.client"; protected String groupId = "io.swagger"; protected String artifactId = "swagger-android-client"; @@ -64,7 +65,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, "artifactId for use in the generated build.gradle and pom.xml")); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, "artifact version for use in the generated build.gradle and pom.xml")); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC)); - cliOptions.add(new CliOption("useAndroidMavenGradlePlugin", "A flag to toggle android-maven gradle plugin. Default is true.")); + cliOptions.add(new CliOption(USE_ANDROID_MAVEN_GRADLE_PLUGIN, "A flag to toggle android-maven gradle plugin. Default is true.")); } public CodegenType getTag() { @@ -220,14 +221,15 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi this.setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); } - if (additionalProperties.containsKey("useAndroidMavenGradlePlugin")) { - this.setUseAndroidMavenGradlePlugin((Boolean) additionalProperties.get("useAndroidMavenGradlePlugin")); + if (additionalProperties.containsKey(USE_ANDROID_MAVEN_GRADLE_PLUGIN)) { + this.setUseAndroidMavenGradlePlugin(Boolean.valueOf((String) additionalProperties + .get(USE_ANDROID_MAVEN_GRADLE_PLUGIN))); } else { - additionalProperties.put("useAndroidMavenGradlePlugin", useAndroidMavenGradlePlugin); + additionalProperties.put(USE_ANDROID_MAVEN_GRADLE_PLUGIN, useAndroidMavenGradlePlugin); } supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - additionalProperties.put("useAndroidMavenGradlePlugin", useAndroidMavenGradlePlugin); + additionalProperties.put(USE_ANDROID_MAVEN_GRADLE_PLUGIN, useAndroidMavenGradlePlugin); supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); supportingFiles.add(new SupportingFile("build.mustache", "", "build.gradle")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index bd3487d06df7..7156df2d4e66 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -1,6 +1,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; @@ -79,8 +80,8 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("object", "Object"); cliOptions.clear(); - cliOptions.add(new CliOption("packageName", "C# package name (convention: Camel.Case), default: IO.Swagger")); - cliOptions.add(new CliOption("packageVersion", "C# package version, default: 1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case), default: IO.Swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version, default: 1.0.0")); } @@ -88,19 +89,19 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey("packageVersion")) { - packageVersion = (String) additionalProperties.get("packageVersion"); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { + setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); } else { - additionalProperties.put("packageVersion", packageVersion); + additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); } - if (additionalProperties.containsKey("packageName")) { - packageName = (String) additionalProperties.get("packageName"); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); apiPackage = packageName + ".Api"; modelPackage = packageName + ".Model"; clientPackage = packageName + ".Client"; } else { - additionalProperties.put("packageName", packageName); + additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); } additionalProperties.put("clientPackage", clientPackage); @@ -252,4 +253,11 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig return camelize(sanitizeName(operationId)); } + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public void setPackageVersion(String packageVersion) { + this.packageVersion = packageVersion; + } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java index 9d9757a91319..9dc8202ce7f9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java @@ -1,6 +1,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; @@ -15,6 +16,7 @@ import java.util.HashMap; import java.util.HashSet; public class CsharpDotNet2ClientCodegen extends DefaultCodegen implements CodegenConfig { + public static final String CLIENT_PACKAGE = "clientPackage"; protected String packageName = "IO.Swagger"; protected String packageVersion = "1.0.0"; protected String clientPackage = "IO.Swagger.Client"; @@ -77,34 +79,34 @@ public class CsharpDotNet2ClientCodegen extends DefaultCodegen implements Codege typeMapping.put("object", "Object"); cliOptions.clear(); - cliOptions.add(new CliOption("packageName", "C# package name (convention: Camel.Case), default: IO.Swagger")); - cliOptions.add(new CliOption("packageVersion", "C# package version, default: 1.0.0")); - + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case), default: IO.Swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version, default: 1.0.0")); + cliOptions.add(new CliOption(CLIENT_PACKAGE, "C# client package name (convention: Camel.Case), default: IO.Swagger.Client")); } @Override public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey("packageVersion")) { - packageVersion = (String) additionalProperties.get("packageVersion"); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { + setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); } else { - additionalProperties.put("packageVersion", packageVersion); + additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); } - if (additionalProperties.containsKey("packageName")) { - packageName = (String) additionalProperties.get("packageName"); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); apiPackage = packageName + ".Api"; modelPackage = packageName + ".Model"; clientPackage = packageName + ".Client"; } else { - additionalProperties.put("packageName", packageName); + additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); } - if (additionalProperties.containsKey("clientPackage")) { - this.setClientPackage((String) additionalProperties.get("clientPackage")); + if (additionalProperties.containsKey(CLIENT_PACKAGE)) { + this.setClientPackage((String) additionalProperties.get(CLIENT_PACKAGE)); } else { - additionalProperties.put("clientPackage", clientPackage); + additionalProperties.put(CLIENT_PACKAGE, clientPackage); } supportingFiles.add(new SupportingFile("Configuration.mustache", @@ -123,6 +125,14 @@ public class CsharpDotNet2ClientCodegen extends DefaultCodegen implements Codege this.clientPackage = clientPackage; } + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public void setPackageVersion(String packageVersion) { + this.packageVersion = packageVersion; + } + public CodegenType getTag() { return CodegenType.CLIENT; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java index ede4505d4ddc..201db359f6f0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java @@ -2,6 +2,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; @@ -15,6 +16,10 @@ import java.util.HashSet; import java.util.HashMap; public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { + public static final String BROWSER_CLIENT = "browserClient"; + public static final String PUB_NAME = "pubName"; + public static final String PUB_VERSION = "pubVersion"; + public static final String PUB_DESCRIPTION = "pubDescription"; protected boolean browserClient = true; protected String pubName = "swagger"; protected String pubVersion = "1.0.0"; @@ -72,10 +77,11 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("date", "DateTime"); typeMapping.put("File", "MultipartFile"); - cliOptions.add(new CliOption("browserClient", "Is the client browser based")); - cliOptions.add(new CliOption("pubName", "Name in generated pubspec")); - cliOptions.add(new CliOption("pubVersion", "Version in generated pubspec")); - cliOptions.add(new CliOption("sourceFolder", "source folder for generated code")); + cliOptions.add(new CliOption(BROWSER_CLIENT, "Is the client browser based")); + cliOptions.add(new CliOption(PUB_NAME, "Name in generated pubspec")); + cliOptions.add(new CliOption(PUB_VERSION, "Version in generated pubspec")); + cliOptions.add(new CliOption(PUB_DESCRIPTION, "Description in generated pubspec")); + cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated code")); } public CodegenType getTag() { @@ -94,37 +100,37 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey("browserClient")) { - this.setBrowserClient(Boolean.parseBoolean((String) additionalProperties.get("browserClient"))); - additionalProperties.put("browserClient", browserClient); + if (additionalProperties.containsKey(BROWSER_CLIENT)) { + this.setBrowserClient(Boolean.parseBoolean((String) additionalProperties.get(BROWSER_CLIENT))); + additionalProperties.put(BROWSER_CLIENT, browserClient); } else { //not set, use to be passed to template - additionalProperties.put("browserClient", browserClient); + additionalProperties.put(BROWSER_CLIENT, browserClient); } - if (additionalProperties.containsKey("pubName")) { - this.setPubName((String) additionalProperties.get("pubName")); + if (additionalProperties.containsKey(PUB_NAME)) { + this.setPubName((String) additionalProperties.get(PUB_NAME)); } else { //not set, use to be passed to template - additionalProperties.put("pubName", pubName); + additionalProperties.put(PUB_NAME, pubName); } - if (additionalProperties.containsKey("pubVersion")) { - this.setPubVersion((String) additionalProperties.get("pubVersion")); + if (additionalProperties.containsKey(PUB_VERSION)) { + this.setPubVersion((String) additionalProperties.get(PUB_VERSION)); } else { //not set, use to be passed to template - additionalProperties.put("pubVersion", pubVersion); + additionalProperties.put(PUB_VERSION, pubVersion); } - if (additionalProperties.containsKey("pubDescription")) { - this.setPubDescription((String) additionalProperties.get("pubDescription")); + if (additionalProperties.containsKey(PUB_DESCRIPTION)) { + this.setPubDescription((String) additionalProperties.get(PUB_DESCRIPTION)); } else { //not set, use to be passed to template - additionalProperties.put("pubDescription", pubDescription); + additionalProperties.put(PUB_DESCRIPTION, pubDescription); } - if (additionalProperties.containsKey("sourceFolder")) { - this.setSourceFolder((String) additionalProperties.get("sourceFolder")); + if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { + this.setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); } final String libFolder = sourceFolder + File.separator + "lib"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java index 7c484c38a0b9..ff4acb41f19f 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java @@ -68,15 +68,19 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig importMapping.put("File", "flash.filesystem.File"); // from - reservedWords = new HashSet( - Arrays.asList( -"add", "for", "lt", "tellTarget", "and", "function", "ne", "this", "break", "ge", "new", "typeof", "continue", "gt", "not", "var", "delete", "if", "on", "void", "do", "ifFrameLoaded", "onClipEvent", "while", "else", "in", "or", "with", "eq", "le", "return")); + reservedWords = new HashSet(Arrays.asList("add", "for", "lt", "tellTarget", "and", + "function", "ne", "this", "break", "ge", "new", "typeof", "continue", "gt", "not", + "var", "delete", "if", "on", "void", "do", "ifFrameLoaded", "onClipEvent", "while", + "else", "in", "or", "with", "eq", "le", "return")); cliOptions.clear(); - cliOptions.add(new CliOption("packageName", "flash package name (convention: package.name), default: io.swagger")); - cliOptions.add(new CliOption("packageVersion", "flash package version, default: 1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "flash package name (convention:" + + " package.name), default: io.swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "flash package version, " + + "default: 1.0.0")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); - cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated code. e.g. src/main/flex")); + cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated " + + "code. e.g. src/main/flex")); } @@ -95,8 +99,8 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig this.setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); } - if (additionalProperties.containsKey("packageName")) { - setPackageName((String) additionalProperties.get("packageName")); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); apiPackage = packageName + ".client.api"; modelPackage = packageName + ".client.model"; } @@ -104,20 +108,21 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig setPackageName("io.swagger"); } - if (additionalProperties.containsKey("packageVersion")) { - setPackageVersion((String) additionalProperties.get("packageVersion")); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { + setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); } else { setPackageVersion("1.0.0"); } - additionalProperties.put("packageName", packageName); - additionalProperties.put("packageVersion", packageVersion); + additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); + additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); //modelPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "model"; //apiPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "api"; - final String invokerFolder = (sourceFolder + File.separator + invokerPackage + File.separator + "swagger" + File.separator).replace(".", File.separator).replace('.', File.separatorChar); + final String invokerFolder = (sourceFolder + File.separator + invokerPackage + File.separator + + "swagger" + File.separator).replace(".", File.separator).replace('.', File.separatorChar); supportingFiles.add(new SupportingFile("ApiInvoker.as", invokerFolder + "common", "ApiInvoker.as")); supportingFiles.add(new SupportingFile("ApiUrlHelper.as", invokerFolder + "common", "ApiUrlHelper.as")); @@ -131,13 +136,20 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("Response.as", invokerFolder + "event", "Response.as")); supportingFiles.add(new SupportingFile("build.properties", sourceFolder, "build.properties")); supportingFiles.add(new SupportingFile("build.xml", sourceFolder, "build.xml")); - supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar + "bin", "AirExecutorApp-app.xml")); - supportingFiles.add(new SupportingFile("ASAXB-0.1.1.swc", sourceFolder + File.separatorChar + "lib", "ASAXB-0.1.1.swc")); - supportingFiles.add(new SupportingFile("as3corelib.swc", sourceFolder + File.separatorChar + "lib", "as3corelib.swc")); - supportingFiles.add(new SupportingFile("flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc", sourceFolder + File.separator + "lib" + File.separator + "ext", "flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc")); - supportingFiles.add(new SupportingFile("flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc", sourceFolder + File.separator + "lib" + File.separator + "ext", "flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc")); - supportingFiles.add(new SupportingFile("flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc", sourceFolder + File.separator + "lib" + File.separator + "ext", "flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc")); - supportingFiles.add(new SupportingFile("flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc", sourceFolder + File.separator + "lib" + File.separator + "ext", "flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc")); + supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar + + "bin", "AirExecutorApp-app.xml")); + supportingFiles.add(new SupportingFile("ASAXB-0.1.1.swc", sourceFolder + File.separatorChar + + "lib", "ASAXB-0.1.1.swc")); + supportingFiles.add(new SupportingFile("as3corelib.swc", sourceFolder + File.separatorChar + + "lib", "as3corelib.swc")); + supportingFiles.add(new SupportingFile("flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc", sourceFolder + + File.separator + "lib" + File.separator + "ext", "flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc")); + supportingFiles.add(new SupportingFile("flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc", sourceFolder + + File.separator + "lib" + File.separator + "ext", "flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc")); + supportingFiles.add(new SupportingFile("flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc", sourceFolder + + File.separator + "lib" + File.separator + "ext", "flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc")); + supportingFiles.add(new SupportingFile("flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc", sourceFolder + + File.separator + "lib" + File.separator + "ext", "flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc")); } private static String dropDots(String str) { @@ -163,11 +175,13 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + apiPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + + apiPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } public String modelFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + modelPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + + modelPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @Override diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index e236b7ac4008..0949afb5d0e2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -151,7 +151,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { } if (additionalProperties.containsKey(CodegenConstants.SERIALIZABLE_MODEL)) { - this.setSerializableModel(Boolean.valueOf((String)additionalProperties.get(CodegenConstants.SERIALIZABLE_MODEL).toString())); + this.setSerializableModel(Boolean.valueOf(additionalProperties.get(CodegenConstants.SERIALIZABLE_MODEL).toString())); } if (additionalProperties.containsKey(CodegenConstants.LIBRARY)) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java index 538a5c494a61..a1c5b985b301 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java @@ -19,6 +19,11 @@ import java.util.HashSet; import org.apache.commons.lang3.StringUtils; public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { + public static final String VARIABLE_NAMING_CONVENTION = "variableNamingConvention"; + public static final String PACKAGE_PATH = "packagePath"; + public static final String SRC_BASE_PATH = "srcBasePath"; + public static final String COMPOSER_VENDOR_NAME = "composerVendorName"; + public static final String COMPOSER_PROJECT_NAME = "composerProjectName"; protected String invokerPackage = "Swagger\\Client"; protected String composerVendorName = "swagger"; protected String composerProjectName = "swagger-client"; @@ -86,12 +91,12 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("object", "object"); typeMapping.put("DateTime", "\\DateTime"); - cliOptions.add(new CliOption("variableNamingConvention", "naming convention of variable name, e.g. camelCase. Default: snake_case")); + cliOptions.add(new CliOption(VARIABLE_NAMING_CONVENTION, "naming convention of variable name, e.g. camelCase. Default: snake_case")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, "The main namespace to use for all classes. e.g. Yay\\Pets")); - cliOptions.add(new CliOption("packagePath", "The main package name for classes. e.g. GeneratedPetstore")); - cliOptions.add(new CliOption("srcBasePath", "The directory under packagePath to serve as source root.")); - cliOptions.add(new CliOption("composerVendorName", "The vendor name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. yaypets")); - cliOptions.add(new CliOption("composerProjectName", "The project name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. petstore-client")); + cliOptions.add(new CliOption(PACKAGE_PATH, "The main package name for classes. e.g. GeneratedPetstore")); + cliOptions.add(new CliOption(SRC_BASE_PATH, "The directory under packagePath to serve as source root.")); + cliOptions.add(new CliOption(COMPOSER_VENDOR_NAME, "The vendor name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. yaypets")); + cliOptions.add(new CliOption(COMPOSER_PROJECT_NAME, "The project name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. petstore-client")); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, "The version to use in the composer package version field. e.g. 1.2.3")); } @@ -144,16 +149,16 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey("packagePath")) { - this.setPackagePath((String) additionalProperties.get("packagePath")); + if (additionalProperties.containsKey(PACKAGE_PATH)) { + this.setPackagePath((String) additionalProperties.get(PACKAGE_PATH)); } else { - additionalProperties.put("packagePath", packagePath); + additionalProperties.put(PACKAGE_PATH, packagePath); } - if (additionalProperties.containsKey("srcBasePath")) { - this.setSrcBasePath((String) additionalProperties.get("srcBasePath")); + if (additionalProperties.containsKey(SRC_BASE_PATH)) { + this.setSrcBasePath((String) additionalProperties.get(SRC_BASE_PATH)); } else { - additionalProperties.put("srcBasePath", srcBasePath); + additionalProperties.put(SRC_BASE_PATH, srcBasePath); } if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { @@ -162,28 +167,24 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage); } - if (additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) { - this.setModelPackage((String) additionalProperties.get(CodegenConstants.MODEL_PACKAGE)); - } else { + if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) { additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage); } - if (additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) { - this.setApiPackage((String) additionalProperties.get(CodegenConstants.API_PACKAGE)); - } else { + if (!additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) { additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage); } - if (additionalProperties.containsKey("composerProjectName")) { - this.setComposerProjectName((String) additionalProperties.get("composerProjectName")); + if (additionalProperties.containsKey(COMPOSER_PROJECT_NAME)) { + this.setComposerProjectName((String) additionalProperties.get(COMPOSER_PROJECT_NAME)); } else { - additionalProperties.put("composerProjectName", composerProjectName); + additionalProperties.put(COMPOSER_PROJECT_NAME, composerProjectName); } - if (additionalProperties.containsKey("composerVendorName")) { - this.setComposerVendorName((String) additionalProperties.get("composerVendorName")); + if (additionalProperties.containsKey(COMPOSER_VENDOR_NAME)) { + this.setComposerVendorName((String) additionalProperties.get(COMPOSER_VENDOR_NAME)); } else { - additionalProperties.put("composerVendorName", composerVendorName); + additionalProperties.put(COMPOSER_VENDOR_NAME, composerVendorName); } if (additionalProperties.containsKey(CodegenConstants.ARTIFACT_VERSION)) { @@ -191,6 +192,10 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { } else { additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion); } + + if (additionalProperties.containsKey(VARIABLE_NAMING_CONVENTION)) { + this.setParameterNamingConvention((String) additionalProperties.get(VARIABLE_NAMING_CONVENTION)); + } additionalProperties.put("escapedInvokerPackage", invokerPackage.replace("\\", "\\\\")); @@ -286,7 +291,7 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { this.variableNamingConvention = variableNamingConvention; } - private void setComposerVendorName(String composerVendorName) { + public void setComposerVendorName(String composerVendorName) { this.composerVendorName = composerVendorName; } @@ -296,10 +301,6 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toVarName(String name) { - if (additionalProperties.containsKey("variableNamingConvention")) { - this.setParameterNamingConvention((String) additionalProperties.get("variableNamingConvention")); - } - // sanitize name name = sanitizeName(name); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java index 6d9982cf78c0..8277aa20f10e 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java @@ -2,6 +2,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; @@ -62,30 +63,31 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig "return", "def", "for", "lambda", "try")); cliOptions.clear(); - cliOptions.add(new CliOption("packageName", "python package name (convention: snake_case), default: swagger_client")); - cliOptions.add(new CliOption("packageVersion", "python package version, default: 1.0.0")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "python package name (convention: snake_case)," + + " default: swagger_client")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "python package version, default: 1.0.0")); } @Override public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey("packageName")) { - setPackageName((String) additionalProperties.get("packageName")); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); } else { setPackageName("swagger_client"); } - if (additionalProperties.containsKey("packageVersion")) { - setPackageVersion((String) additionalProperties.get("packageVersion")); + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { + setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); } else { setPackageVersion("1.0.0"); } - additionalProperties.put("packageName", packageName); - additionalProperties.put("packageVersion", packageVersion); + additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); + additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); String swaggerFolder = packageName; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 4aac683b6ef8..0856f24b6906 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -16,6 +16,9 @@ import java.util.HashSet; import org.apache.commons.lang.StringUtils; public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { + public static final String GEM_NAME = "gemName"; + public static final String MODULE_NAME = "moduleName"; + public static final String GEM_VERSION = "gemVersion"; protected String gemName = null; protected String moduleName = null; protected String gemVersion = "1.0.0"; @@ -68,20 +71,20 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { // remove modelPackage and apiPackage added by default cliOptions.clear(); - cliOptions.add(new CliOption("gemName", "gem name (convention: underscore_case), default: swagger_client")); - cliOptions.add(new CliOption("moduleName", "top module name (convention: CamelCase, usually corresponding to gem name), default: SwaggerClient")); - cliOptions.add(new CliOption("gemVersion", "gem version, default: 1.0.0")); + cliOptions.add(new CliOption(GEM_NAME, "gem name (convention: underscore_case), default: swagger_client")); + cliOptions.add(new CliOption(MODULE_NAME, "top module name (convention: CamelCase, usually corresponding to gem name), default: SwaggerClient")); + cliOptions.add(new CliOption(GEM_VERSION, "gem version, default: 1.0.0")); } @Override public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey("gemName")) { - setGemName((String) additionalProperties.get("gemName")); + if (additionalProperties.containsKey(GEM_NAME)) { + setGemName((String) additionalProperties.get(GEM_NAME)); } - if (additionalProperties.containsKey("moduleName")) { - setModuleName((String) additionalProperties.get("moduleName")); + if (additionalProperties.containsKey(MODULE_NAME)) { + setModuleName((String) additionalProperties.get(MODULE_NAME)); } if (gemName == null && moduleName == null) { @@ -93,14 +96,14 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { setModuleName(generateModuleName(gemName)); } - additionalProperties.put("gemName", gemName); - additionalProperties.put("moduleName", moduleName); + additionalProperties.put(GEM_NAME, gemName); + additionalProperties.put(MODULE_NAME, moduleName); - if (additionalProperties.containsKey("gemVersion")) { - setGemVersion((String) additionalProperties.get("gemVersion")); + if (additionalProperties.containsKey(GEM_VERSION)) { + setGemVersion((String) additionalProperties.get(GEM_VERSION)); } else { // not set, pass the default value to template - additionalProperties.put("gemVersion", gemVersion); + additionalProperties.put(GEM_VERSION, gemVersion); } // use constant model/api package (folder path) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/android/AndroidClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/android/AndroidClientOptionsTest.java new file mode 100644 index 000000000000..4ea24aeca987 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/android/AndroidClientOptionsTest.java @@ -0,0 +1,71 @@ +package io.swagger.codegen.android; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.AndroidClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class AndroidClientOptionsTest extends AbstractOptionsTest { + protected static final String ARTIFACT_ID_VALUE = "swagger-java-client-test"; + protected static final String MODEL_PACKAGE_VALUE = "package"; + protected static final String API_PACKAGE_VALUE = "apiPackage"; + protected static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; + protected static final String SORT_PARAMS_VALUE = "false"; + protected static final String GROUP_ID_VALUE = "io.swagger.test"; + protected static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; + protected static final String SOURCE_FOLDER_VALUE = "src/main/java/test"; + protected static final String ANDROID_MAVEN_GRADLE_PLUGIN_VALUE = "true"; + + @Tested + private AndroidClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SORT_PARAMS_VALUE)); + times = 1; + clientCodegen.setInvokerPackage(INVOKER_PACKAGE_VALUE); + times = 1; + clientCodegen.setGroupId(GROUP_ID_VALUE); + times = 1; + clientCodegen.setArtifactId(ARTIFACT_ID_VALUE); + times = 1; + clientCodegen.setArtifactVersion(ARTIFACT_VERSION_VALUE); + times = 1; + clientCodegen.setSourceFolder(SOURCE_FOLDER_VALUE); + times = 1; + clientCodegen.setUseAndroidMavenGradlePlugin(Boolean.valueOf(ANDROID_MAVEN_GRADLE_PLUGIN_VALUE)); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) + .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) + .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE) + .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .put(AndroidClientCodegen.USE_ANDROID_MAVEN_GRADLE_PLUGIN, ANDROID_MAVEN_GRADLE_PLUGIN_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java new file mode 100644 index 000000000000..5a64e676dcbe --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -0,0 +1,43 @@ +package io.swagger.codegen.csharp; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.CSharpClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class CSharpClientOptionsTest extends AbstractOptionsTest { + protected static final String PACKAGE_NAME_VALUE = "swagger_client_csharp"; + protected static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; + + @Tested + private CSharpClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setPackageName(PACKAGE_NAME_VALUE); + times = 1; + clientCodegen.setPackageVersion(PACKAGE_VERSION_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) + .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharpdotnettwo/CsharpDotNet2ClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharpdotnettwo/CsharpDotNet2ClientOptionsTest.java new file mode 100644 index 000000000000..d9455103576c --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharpdotnettwo/CsharpDotNet2ClientOptionsTest.java @@ -0,0 +1,47 @@ +package io.swagger.codegen.csharpdotnettwo; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.CsharpDotNet2ClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class CsharpDotNet2ClientOptionsTest extends AbstractOptionsTest { + protected static final String PACKAGE_NAME_VALUE = "swagger_client_csharp_dotnet"; + protected static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; + protected static final String CLIENT_PACKAGE_VALUE = "IO.Swagger.Client.Test"; + + @Tested + private CsharpDotNet2ClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setPackageName(PACKAGE_NAME_VALUE); + times = 1; + clientCodegen.setPackageVersion(PACKAGE_VERSION_VALUE); + times = 1; + clientCodegen.setClientPackage(CLIENT_PACKAGE_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) + .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .put(CsharpDotNet2ClientCodegen.CLIENT_PACKAGE, CLIENT_PACKAGE_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java new file mode 100644 index 000000000000..6a63754d6465 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java @@ -0,0 +1,68 @@ +package io.swagger.codegen.dart; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.DartClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class DartClientOptionsTest extends AbstractOptionsTest { + protected static final String MODEL_PACKAGE_VALUE = "packagedart"; + protected static final String API_PACKAGE_VALUE = "apiPackageDart"; + protected static final String SORT_PARAMS_VALUE = "false"; + protected static final String BROWSER_CLIENT_VALUE = "true"; + protected static final String PUB_NAME_VALUE = "swagger"; + protected static final String PUB_VERSION_VALUE = "1.0.0-SNAPSHOT"; + protected static final String PUB_DESCRIPTION_VALUE = "Swagger API client dart"; + protected static final String SOURCE_FOLDER_VALUE = "src"; + + @Tested + private DartClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SORT_PARAMS_VALUE)); + times = 1; + clientCodegen.setBrowserClient(Boolean.valueOf(BROWSER_CLIENT_VALUE)); + times = 1; + clientCodegen.setPubName(PUB_NAME_VALUE); + times = 1; + clientCodegen.setPubVersion(PUB_VERSION_VALUE); + times = 1; + clientCodegen.setPubDescription(PUB_DESCRIPTION_VALUE); + times = 1; + clientCodegen.setSourceFolder(SOURCE_FOLDER_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(DartClientCodegen.BROWSER_CLIENT, BROWSER_CLIENT_VALUE) + .put(DartClientCodegen.PUB_NAME, PUB_NAME_VALUE) + .put(DartClientCodegen.PUB_VERSION, PUB_VERSION_VALUE) + .put(DartClientCodegen.PUB_DESCRIPTION, PUB_DESCRIPTION_VALUE) + .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .build(); + } +} + diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/flash/FlashClienOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/flash/FlashClienOptionsTest.java new file mode 100644 index 000000000000..75a9df65e405 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/flash/FlashClienOptionsTest.java @@ -0,0 +1,51 @@ +package io.swagger.codegen.flash; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.FlashClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class FlashClienOptionsTest extends AbstractOptionsTest { + protected static final String PACKAGE_NAME_VALUE = "io.swagger.flash"; + protected static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; + protected static final String INVOKER_PACKAGE_VALUE = "io.swagger.flash"; + protected static final String SOURCE_FOLDER_VALUE = "src/main/flex/test"; + + @Tested + private FlashClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setPackageName(PACKAGE_NAME_VALUE); + times = 1; + clientCodegen.setPackageVersion(PACKAGE_VERSION_VALUE); + times = 1; + clientCodegen.setInvokerPackage(INVOKER_PACKAGE_VALUE); + times = 1; + clientCodegen.setSourceFolder(SOURCE_FOLDER_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) + .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java new file mode 100644 index 000000000000..5ad3eb33f2a0 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java @@ -0,0 +1,48 @@ +package io.swagger.codegen.nodejs; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.JavaClientCodegen; +import io.swagger.codegen.languages.NodeJSServerCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class NodeJSServerOptionsTest extends AbstractOptionsTest { + private static final String MODEL_PACKAGE_VALUE = "package"; + private static final String API_PACKAGE_VALUE = "apiPackage"; + private static final String SORT_PARAMS_VALUE = "false"; + + @Tested + private NodeJSServerCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SORT_PARAMS_VALUE)); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientOptionsTest.java new file mode 100644 index 000000000000..413ee5380537 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpClientOptionsTest.java @@ -0,0 +1,75 @@ +package io.swagger.codegen.php; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.PhpClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class PhpClientOptionsTest extends AbstractOptionsTest { + protected static final String MODEL_PACKAGE_VALUE = "package"; + protected static final String API_PACKAGE_VALUE = "apiPackage"; + protected static final String SORT_PARAMS_VALUE = "false"; + protected static final String VARIABLE_NAMING_CONVENTION_VALUE = "snake_case"; + protected static final String INVOKER_PACKAGE_VALUE = "Swagger\\Client\\Php"; + protected static final String PACKAGE_PATH_VALUE = "SwaggerClient-php"; + protected static final String SRC_BASE_PATH_VALUE = "libPhp"; + protected static final String COMPOSER_VENDOR_NAME_VALUE = "swaggerPhp"; + protected static final String COMPOSER_PROJECT_NAME_VALUE = "swagger-client-php"; + protected static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; + + @Tested + private PhpClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(SORT_PARAMS_VALUE)); + times = 1; + clientCodegen.setParameterNamingConvention(VARIABLE_NAMING_CONVENTION_VALUE); + times = 1; + clientCodegen.setInvokerPackage(INVOKER_PACKAGE_VALUE); + times = 1; + clientCodegen.setPackagePath(PACKAGE_PATH_VALUE); + times = 1; + clientCodegen.setSrcBasePath(SRC_BASE_PATH_VALUE); + times = 1; + clientCodegen.setComposerVendorName(COMPOSER_VENDOR_NAME_VALUE); + times = 1; + clientCodegen.setComposerProjectName(COMPOSER_PROJECT_NAME_VALUE); + times = 1; + clientCodegen.setArtifactVersion(ARTIFACT_VERSION_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(PhpClientCodegen.VARIABLE_NAMING_CONVENTION, VARIABLE_NAMING_CONVENTION_VALUE) + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(PhpClientCodegen.PACKAGE_PATH, PACKAGE_PATH_VALUE) + .put(PhpClientCodegen.SRC_BASE_PATH, SRC_BASE_PATH_VALUE) + .put(PhpClientCodegen.COMPOSER_VENDOR_NAME, COMPOSER_VENDOR_NAME_VALUE) + .put(PhpClientCodegen.COMPOSER_PROJECT_NAME, COMPOSER_PROJECT_NAME_VALUE) + .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java new file mode 100644 index 000000000000..645471789e81 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java @@ -0,0 +1,43 @@ +package io.swagger.codegen.python; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.PythonClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class PythonClientOptionsTest extends AbstractOptionsTest { + protected static final String PACKAGE_NAME_VALUE = "swagger_client_python"; + protected static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; + + @Tested + private PythonClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setPackageName(PACKAGE_NAME_VALUE); + times = 1; + clientCodegen.setPackageVersion(PACKAGE_VERSION_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) + .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .build(); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ruby/RubyClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ruby/RubyClientOptionsTest.java new file mode 100644 index 000000000000..ca2ea19a2d9e --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ruby/RubyClientOptionsTest.java @@ -0,0 +1,46 @@ +package io.swagger.codegen.ruby; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.languages.RubyClientCodegen; + +import com.google.common.collect.ImmutableMap; +import mockit.Expectations; +import mockit.Tested; + +import java.util.Map; + +public class RubyClientOptionsTest extends AbstractOptionsTest { + private static final String GEM_NAME_VALUE = "swagger_client_ruby"; + private static final String MODULE_NAME_VALUE = "SwaggerClientRuby"; + private static final String GEM_VERSION_VALUE = "1.0.0-SNAPSHOT"; + + @Tested + private RubyClientCodegen clientCodegen; + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setGemName(GEM_NAME_VALUE); + times = 1; + clientCodegen.setModuleName(MODULE_NAME_VALUE); + times = 1; + clientCodegen.setGemVersion(GEM_VERSION_VALUE); + times = 1; + }}; + } + + @Override + protected Map getAvaliableOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(RubyClientCodegen.GEM_NAME, GEM_NAME_VALUE) + .put(RubyClientCodegen.MODULE_NAME, MODULE_NAME_VALUE) + .put(RubyClientCodegen.GEM_VERSION, GEM_VERSION_VALUE) + .build(); + } +}