From 33b8e8aa5b1368a8db409326419ab3509ea668d6 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 16 Nov 2015 10:53:45 +0800 Subject: [PATCH 01/76] add golang --- .../resources/META-INF/services/io.swagger.codegen.CodegenConfig | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig index 5d8a4f0fc6bf..87d612299368 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig @@ -4,6 +4,7 @@ io.swagger.codegen.languages.CSharpClientCodegen io.swagger.codegen.languages.DartClientCodegen io.swagger.codegen.languages.FlashClientCodegen io.swagger.codegen.languages.FlaskConnexionCodegen +io.swagger.codegen.languages.GoClientCodegen io.swagger.codegen.languages.JavaClientCodegen io.swagger.codegen.languages.JavascriptClientCodegen io.swagger.codegen.languages.JaxRSServerCodegen From a05076ed09d545cc555b682579bd47c7816f2706 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 21 Dec 2015 00:18:00 +0800 Subject: [PATCH 02/76] first commit of golang generator before fixing return --- .../io/swagger/codegen/DefaultCodegen.java | 2 + .../io/swagger/codegen/DefaultGenerator.java | 4 + .../codegen/languages/GoClientCodegen.java | 252 +++++++++++ .../src/main/resources/go/api.mustache | 98 +++++ .../src/main/resources/go/model.mustache | 15 + .../client/petstore/go/swagger/ApiClient.go | 33 ++ .../client/petstore/go/swagger/Category.go | 10 + samples/client/petstore/go/swagger/Order.go | 15 + samples/client/petstore/go/swagger/Pet.go | 14 + samples/client/petstore/go/swagger/PetApi.go | 407 ++++++++++++++++++ .../client/petstore/go/swagger/StoreApi.go | 198 +++++++++ samples/client/petstore/go/swagger/Tag.go | 10 + samples/client/petstore/go/swagger/User.go | 16 + samples/client/petstore/go/swagger/UserApi.go | 380 ++++++++++++++++ samples/client/petstore/go/test.go | 14 + 15 files changed, 1468 insertions(+) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java create mode 100644 modules/swagger-codegen/src/main/resources/go/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/go/model.mustache create mode 100644 samples/client/petstore/go/swagger/ApiClient.go create mode 100644 samples/client/petstore/go/swagger/Category.go create mode 100644 samples/client/petstore/go/swagger/Order.go create mode 100644 samples/client/petstore/go/swagger/Pet.go create mode 100644 samples/client/petstore/go/swagger/PetApi.go create mode 100644 samples/client/petstore/go/swagger/StoreApi.go create mode 100644 samples/client/petstore/go/swagger/Tag.go create mode 100644 samples/client/petstore/go/swagger/User.go create mode 100644 samples/client/petstore/go/swagger/UserApi.go create mode 100644 samples/client/petstore/go/test.go 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 11472fec4ff6..ac91c60fa0f0 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 @@ -1045,6 +1045,8 @@ public class DefaultCodegen { } property.baseType = getSwaggerType(p); + LOGGER.info("property.baseType=" + property.baseType); + LOGGER.info("property.datatype=" + property.datatype); if (p instanceof ArrayProperty) { property.isContainer = true; 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 3623361387ed..24c17615f2d4 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 @@ -657,6 +657,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { for (String nextImport : allImports) { Map im = new LinkedHashMap(); String mapping = config.importMapping().get(nextImport); + LOGGER.info("mapping = " + mapping); if (mapping == null) { mapping = config.toModelImport(nextImport); } @@ -703,6 +704,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { List> imports = new ArrayList>(); for (String nextImport : allImports) { + LOGGER.info("nextImport=" + nextImport); Map im = new LinkedHashMap(); String mapping = config.importMapping().get(nextImport); if (mapping == null) { @@ -711,12 +713,14 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { if (mapping != null && !config.defaultIncludes().contains(mapping)) { im.put("import", mapping); imports.add(im); + LOGGER.info("config.importMaping added " + mapping); } // add instantiation types mapping = config.instantiationTypes().get(nextImport); if (mapping != null && !config.defaultIncludes().contains(mapping)) { im.put("import", mapping); imports.add(im); + LOGGER.info("config.instantiationTypes added " + mapping); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java new file mode 100644 index 000000000000..04401b044e52 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java @@ -0,0 +1,252 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.*; +import io.swagger.models.properties.ArrayProperty; +import io.swagger.models.properties.MapProperty; +import io.swagger.models.properties.Property; + +import java.io.File; +import java.util.*; + +import org.apache.commons.lang.StringUtils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { + static Logger LOGGER = LoggerFactory.getLogger(GoClientCodegen.class); + + protected String invokerPackage = "swagger"; + protected String groupId = "io.swagger"; + protected String artifactId = "swagger-go-client"; + protected String artifactVersion = "1.0.0"; + + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + public String getName() { + return "go"; + } + + public String getHelp() { + return "Generates a Go client library."; + } + + public GoClientCodegen() { + super(); + outputFolder = "generated-code/go"; + modelTemplateFiles.put("model.mustache", ".go"); + apiTemplateFiles.put("api.mustache", ".go"); + templateDir = "go"; + apiPackage = invokerPackage; + modelPackage = invokerPackage; + + reservedWords = new HashSet ( + Arrays.asList( + "break", "default", "func", "interface", "select", + "case", "defer", "go", "map", "struct", + "chan", "else", "goto", "package", "switch", + "const", "fallthrough", "if", "range", "type", + "continue", "for", "import", "return", "var") + ); + + additionalProperties.put("invokerPackage", invokerPackage); + /*additionalProperties.put("groupId", groupId); + additionalProperties.put("artifactId", artifactId); + additionalProperties.put("artifactVersion", artifactVersion);*/ + + defaultIncludes = new HashSet( + Arrays.asList( + "map", + "array") + ); + + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "string", + "bool", + "uint", + "uint32", + "uint64", + "int", + "int32", + "int64", + "float32", + "float64", + "complex64", + "complex128", + "rune", + "byte") + ); + + instantiationTypes.clear(); + /*instantiationTypes.put("array", "GoArray"); + instantiationTypes.put("map", "GoMap");*/ + + typeMapping.clear(); + typeMapping.put("integer", "int32"); + typeMapping.put("long", "int64"); + typeMapping.put("float", "float32"); + typeMapping.put("double", "float64"); + typeMapping.put("boolean", "bool"); + typeMapping.put("string", "string"); + typeMapping.put("Date", "time.Time"); + typeMapping.put("DateTime", "time.Time"); + typeMapping.put("password", "string"); + typeMapping.put("file", "*os.File"); + //typeMapping.put("array", "array"); + //typeMapping.put("map", "map"); + + importMapping = new HashMap(); + importMapping.put("time.Time", "time"); + importMapping.put("*os.File", "os"); + + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } + + @Override + public String apiFileFolder() { + return outputFolder + File.separator + invokerPackage; + } + + public String modelFileFolder() { + return outputFolder + File.separator + invokerPackage; + } + + @Override + public String toVarName(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) + return name; + + // camelize (lower first character) the variable name + // pet_id => petId + name = camelize(name, true); + + // for reserved word or word starting with number, append _ + if(reservedWords.contains(name) || name.matches("^\\d.*")) + name = escapeReservedWord(name); + + return name; + } + + @Override + public String toParamName(String name) { + // should be the same as variable name + return toVarName(name); + } + + @Override + public String toModelName(String name) { + // model name cannot use reserved keyword, e.g. return + if(reservedWords.contains(name)) + throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); + + // camelize the model name + // phone_number => PhoneNumber + return camelize(name); + } + + @Override + public String toModelFilename(String name) { + // should be the same as the model name + return toModelName(name); + } + + @Override + public String getTypeDeclaration(Property p) { + LOGGER.info("getTypeDeclaration=" + p.getName()); + if(p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return "[]" + getTypeDeclaration(inner); + } + else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + + return getSwaggerType(p) + "[string]" + getTypeDeclaration(inner); + } + LOGGER.info("super.getTypeDeclaration=" + super.getTypeDeclaration(p)); + return super.getTypeDeclaration(p); + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + LOGGER.info("swaggerType=" + swaggerType); + String type = null; + if(typeMapping.containsKey(swaggerType)) { + type = typeMapping.get(swaggerType); + if(languageSpecificPrimitives.contains(type)) + return (type); + } + else + type = swaggerType; + return type; + } + + @Override + public String toOperationId(String operationId) { + // method name cannot use reserved keyword, e.g. return + if(reservedWords.contains(operationId)) + throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); + + return camelize(operationId, true); + } + + @Override + public Map postProcessOperations(Map objs) { + @SuppressWarnings("unchecked") + Map objectMap = (Map) objs.get("operations"); + @SuppressWarnings("unchecked") + List operations = (List) objectMap.get("operation"); + for (CodegenOperation operation : operations) { + // http method verb conversion (e.g. PUT => Put) + operation.httpMethod = camelize(operation.httpMethod.toLowerCase()); + } + + // remove model imports to avoid error + List> imports = (List>) objs.get("imports"); + if (imports == null) + return objs; + + Iterator> iterator = imports.iterator(); + while (iterator.hasNext()) { + String _import = iterator.next().get("import"); + if (_import.startsWith(apiPackage())) + iterator.remove(); + } + + return objs; + } + + @Override + public Map postProcessModels(Map objs) { + // remove model imports to avoid error + List> imports = (List>) objs.get("imports"); + final String prefix = modelPackage(); + Iterator> iterator = imports.iterator(); + while (iterator.hasNext()) { + String _import = iterator.next().get("import"); + if (_import.startsWith(prefix)) + iterator.remove(); + } + return objs; + } + + @Override + protected boolean needToImport(String type) { + return !defaultIncludes.contains(type) + && !languageSpecificPrimitives.contains(type); + } + +} diff --git a/modules/swagger-codegen/src/main/resources/go/api.mustache b/modules/swagger-codegen/src/main/resources/go/api.mustache new file mode 100644 index 000000000000..1e18bde85caa --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/go/api.mustache @@ -0,0 +1,98 @@ +package {{invokerPackage}} + +{{#operations}} +import ( + "strings" + "fmt" +// "log" + "github.com/dghubble/sling" +{{#imports}} "{{import}}" +{{/imports}} +) + +type {{classname}} struct { + basePath string + apiClient ApiClient + sling *sling.Sling +} + +func New{{classname}}() *{{classname}}{ + return &{{classname}} { + basePath: "{{basePath}}", + } +} + +func New{{classname}}WithBasePath(basePath string) *{{classname}}{ + return &{{classname}} { + basePath: basePath, + } +} + +{{#operation}} +/** + * {{summary}} + * {{notes}} +{{#allParams}} * @param {{paramName}} {{description}} +{{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} + */ +func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}}error) { + {{#allParams}}{{#required}} + // verify the required parameter '{{paramName}}' is set + //if {{paramName}} == nil { + // return 0, fmt.Error("Missing the required parameter '{{paramName}}' when calling {{nickname}}") + //} + {{/required}}{{/allParams}} + + _sling := a.sling.{{httpMethod}}(a.basePath) + + // create path and map variables + path := "{{path}}" + {{#pathParams}}//path = regexp.MustCompile("{" + "{{paramName}}" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "{{paramName}}" + "\\}", ApiClient.EscapeString({{{paramName}}})) + path = strings.Replace(path, "{" + "{{baseName}}" + "}", fmt.Sprintf("%b", {{paramName}}), -1) + {{/pathParams}} + + _sling = _sling.Path(path) + + {{#hasQueryParams}} + type QueryParams struct { + {{#queryParams}}{{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` + {{/queryParams}} + } + + _sling = _sling.QueryStruct(&QueryParams{ {{#queryParams}}{{paramName}}: {{baseName}}{{#hasMore}},{{/hasMore}}{{/queryParams}} }) + {{/hasQueryParams}} + + {{#headerParams}}// header params "{{baseName}}" + _sling = _sling.Set("{{baseName}}", {{paramName}}) + {{/headerParams}} + + //contentTypes := []string { {{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}} } + + {{#hasFormParams}} + type FormParams struct { + {{#formParams}}{{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` + {{/formParams}} + } + _sling = _sling.BodyForm(&FormParams{ {{#formParams}}{{paramName}}: {{baseName}}{{#hasMore}},{{/hasMore}}{{/formParams}} }) + {{/hasFormParams}} + + {{#bodyParams}}// body params + _sling = _sling.BodyJSON({{paramName}}) + //b, _ := json.Marshal(body) + //bodyParams["{{baseName}}"] = string(b) + {{/bodyParams}} + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "{{httpMethod}}", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //{{#returnType}}ApiClient.Deserialize(response, "{{returnContainer}}", "{{returnBaseType}}"){{/returnType}} + {{#returnType}}return req, err{{/returnType}} + {{^returnType}}return err{{/returnType}} +} +{{/operation}} +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/go/model.mustache b/modules/swagger-codegen/src/main/resources/go/model.mustache new file mode 100644 index 000000000000..bbd7e772d0e7 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/go/model.mustache @@ -0,0 +1,15 @@ +package {{invokerPackage}} + +{{#models}} +import ( +{{#imports}} "{{import}}" +{{/imports}} +) + +{{#model}} +type {{classname}} struct { + {{#vars}}{{name}} {{{datatype}}} `json:"{{baseName}},omitempty"` + {{/vars}} +} +{{/model}} +{{/models}} diff --git a/samples/client/petstore/go/swagger/ApiClient.go b/samples/client/petstore/go/swagger/ApiClient.go new file mode 100644 index 000000000000..420a7df21ed8 --- /dev/null +++ b/samples/client/petstore/go/swagger/ApiClient.go @@ -0,0 +1,33 @@ +package swagger + +import ( +// "encoding/json" + "os" +// "fmt" + "log" +// "net/url" +// napping "github.com/jmcvetta/napping" +) + +type ApiClient struct { + basePath string + logger *log.Logger +} + +func NewApiClient() *ApiClient { + return &ApiClient { + basePath: "http://petstore.swagger.io/v2", + logger: log.New(os.Stderr, "", log.LstdFlags)} +} + +func NewApiClientWithBasePath(basePath string) *ApiClient { + return &ApiClient { + basePath: basePath, + logger: log.New(os.Stderr, "", log.LstdFlags)} +} + + +func (a *ApiClient) CallApi(basePath string, path string, httpMethod string, queryParams map[string]string, headerParams map[string]string, formParams map[string]string, fileParams map[string]string, bodyParams map[string]string, contentType []string) { + a.logger.Printf("Requesting %v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n", basePath, path, httpMethod, queryParams, headerParams, formParams, fileParams, bodyParams, contentType) + +} diff --git a/samples/client/petstore/go/swagger/Category.go b/samples/client/petstore/go/swagger/Category.go new file mode 100644 index 000000000000..7681d4c5e6fa --- /dev/null +++ b/samples/client/petstore/go/swagger/Category.go @@ -0,0 +1,10 @@ +package swagger + +import ( +) + +type Category struct { + id int64 `json:"id,omitempty"` + name string `json:"name,omitempty"` + +} diff --git a/samples/client/petstore/go/swagger/Order.go b/samples/client/petstore/go/swagger/Order.go new file mode 100644 index 000000000000..187f3ed57950 --- /dev/null +++ b/samples/client/petstore/go/swagger/Order.go @@ -0,0 +1,15 @@ +package swagger + +import ( + "time" +) + +type Order struct { + id int64 `json:"id,omitempty"` + petId int64 `json:"petId,omitempty"` + quantity int32 `json:"quantity,omitempty"` + shipDate time.Time `json:"shipDate,omitempty"` + status string `json:"status,omitempty"` + complete bool `json:"complete,omitempty"` + +} diff --git a/samples/client/petstore/go/swagger/Pet.go b/samples/client/petstore/go/swagger/Pet.go new file mode 100644 index 000000000000..cbc962df5303 --- /dev/null +++ b/samples/client/petstore/go/swagger/Pet.go @@ -0,0 +1,14 @@ +package swagger + +import ( +) + +type Pet struct { + id int64 `json:"id,omitempty"` + category Category `json:"category,omitempty"` + name string `json:"name,omitempty"` + photoUrls []string `json:"photoUrls,omitempty"` + tags []Tag `json:"tags,omitempty"` + status string `json:"status,omitempty"` + +} diff --git a/samples/client/petstore/go/swagger/PetApi.go b/samples/client/petstore/go/swagger/PetApi.go new file mode 100644 index 000000000000..5170797cc806 --- /dev/null +++ b/samples/client/petstore/go/swagger/PetApi.go @@ -0,0 +1,407 @@ +package swagger + +import ( + "strings" + "fmt" +// "log" + "github.com/dghubble/sling" + "os" +) + +type PetApi struct { + basePath string + apiClient ApiClient + sling *sling.Sling +} + +func NewPetApi() *PetApi{ + return &PetApi { + basePath: "http://petstore.swagger.io/v2", + } +} + +func NewPetApiWithBasePath(basePath string) *PetApi{ + return &PetApi { + basePath: basePath, + } +} + +/** + * Update an existing pet + * + * @param body Pet object that needs to be added to the store + * @return void + */ +func (a PetApi) updatePet (body Pet) (error) { + + + _sling := a.sling.Put(a.basePath) + + // create path and map variables + path := "/pet" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { "application/json","application/xml" } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Add a new pet to the store + * + * @param body Pet object that needs to be added to the store + * @return void + */ +func (a PetApi) addPet (body Pet) (error) { + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/pet" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { "application/json","application/xml" } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Finds Pets by status + * Multiple status values can be provided with comma seperated strings + * @param status Status values that need to be considered for filter + * @return []Pet + */ +func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/pet/findByStatus" + + + _sling = _sling.Path(path) + + + type QueryParams struct { + status []string `url:"status,omitempty"` + + } + + _sling = _sling.QueryStruct(&QueryParams{ status: status }) + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "array", "Pet") + return req, err + +} +/** + * Finds Pets by tags + * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + * @param tags Tags to filter by + * @return []Pet + */ +func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/pet/findByTags" + + + _sling = _sling.Path(path) + + + type QueryParams struct { + tags []string `url:"tags,omitempty"` + + } + + _sling = _sling.QueryStruct(&QueryParams{ tags: tags }) + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "array", "Pet") + return req, err + +} +/** + * Find pet by ID + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return Pet + */ +func (a PetApi) getPetById (petId int64) (Pet, error) { + + // verify the required parameter 'petId' is set + //if petId == nil { + // return 0, fmt.Error("Missing the required parameter 'petId' when calling getPetById") + //} + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/pet/{petId}" + //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "", "Pet") + return req, err + +} +/** + * Updates a pet in the store with form data + * + * @param petId ID of pet that needs to be updated + * @param name Updated name of the pet + * @param status Updated status of the pet + * @return void + */ +func (a PetApi) updatePetWithForm (petId string, name string, status string) (error) { + + // verify the required parameter 'petId' is set + //if petId == nil { + // return 0, fmt.Error("Missing the required parameter 'petId' when calling updatePetWithForm") + //} + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/pet/{petId}" + //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { "application/x-www-form-urlencoded" } + + + type FormParams struct { + name string `url:"name,omitempty"` + status string `url:"status,omitempty"` + + } + _sling = _sling.BodyForm(&FormParams{ name: name,status: status }) + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Deletes a pet + * + * @param petId Pet id to delete + * @param apiKey + * @return void + */ +func (a PetApi) deletePet (petId int64, apiKey string) (error) { + + // verify the required parameter 'petId' is set + //if petId == nil { + // return 0, fmt.Error("Missing the required parameter 'petId' when calling deletePet") + //} + + + _sling := a.sling.Delete(a.basePath) + + // create path and map variables + path := "/pet/{petId}" + //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) + + + _sling = _sling.Path(path) + + + + // header params "api_key" + _sling = _sling.Set("api_key", apiKey) + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * uploads an image + * + * @param petId ID of pet to update + * @param additionalMetadata Additional data to pass to server + * @param file file to upload + * @return void + */ +func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.File) (error) { + + // verify the required parameter 'petId' is set + //if petId == nil { + // return 0, fmt.Error("Missing the required parameter 'petId' when calling uploadFile") + //} + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/pet/{petId}/uploadImage" + //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { "multipart/form-data" } + + + type FormParams struct { + additionalMetadata string `url:"additionalMetadata,omitempty"` + file *os.File `url:"file,omitempty"` + + } + _sling = _sling.BodyForm(&FormParams{ additionalMetadata: additionalMetadata,file: file }) + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} diff --git a/samples/client/petstore/go/swagger/StoreApi.go b/samples/client/petstore/go/swagger/StoreApi.go new file mode 100644 index 000000000000..987c39a72163 --- /dev/null +++ b/samples/client/petstore/go/swagger/StoreApi.go @@ -0,0 +1,198 @@ +package swagger + +import ( + "strings" + "fmt" +// "log" + "github.com/dghubble/sling" +) + +type StoreApi struct { + basePath string + apiClient ApiClient + sling *sling.Sling +} + +func NewStoreApi() *StoreApi{ + return &StoreApi { + basePath: "http://petstore.swagger.io/v2", + } +} + +func NewStoreApiWithBasePath(basePath string) *StoreApi{ + return &StoreApi { + basePath: basePath, + } +} + +/** + * Returns pet inventories by status + * Returns a map of status codes to quantities + * @return map[string]int32 + */ +func (a StoreApi) getInventory () (map[string]int32, error) { + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/store/inventory" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "map", "map") + return req, err + +} +/** + * Place an order for a pet + * + * @param body order placed for purchasing the pet + * @return Order + */ +func (a StoreApi) placeOrder (body Order) (Order, error) { + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/store/order" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "", "Order") + return req, err + +} +/** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param orderId ID of pet that needs to be fetched + * @return Order + */ +func (a StoreApi) getOrderById (orderId string) (Order, error) { + + // verify the required parameter 'orderId' is set + //if orderId == nil { + // return 0, fmt.Error("Missing the required parameter 'orderId' when calling getOrderById") + //} + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/store/order/{orderId}" + //path = regexp.MustCompile("{" + "orderId" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "orderId" + "\\}", ApiClient.EscapeString(orderId)) + path = strings.Replace(path, "{" + "orderId" + "}", fmt.Sprintf("%b", orderId), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "", "Order") + return req, err + +} +/** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param orderId ID of the order that needs to be deleted + * @return void + */ +func (a StoreApi) deleteOrder (orderId string) (error) { + + // verify the required parameter 'orderId' is set + //if orderId == nil { + // return 0, fmt.Error("Missing the required parameter 'orderId' when calling deleteOrder") + //} + + + _sling := a.sling.Delete(a.basePath) + + // create path and map variables + path := "/store/order/{orderId}" + //path = regexp.MustCompile("{" + "orderId" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "orderId" + "\\}", ApiClient.EscapeString(orderId)) + path = strings.Replace(path, "{" + "orderId" + "}", fmt.Sprintf("%b", orderId), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} diff --git a/samples/client/petstore/go/swagger/Tag.go b/samples/client/petstore/go/swagger/Tag.go new file mode 100644 index 000000000000..7fd20f55ef4e --- /dev/null +++ b/samples/client/petstore/go/swagger/Tag.go @@ -0,0 +1,10 @@ +package swagger + +import ( +) + +type Tag struct { + id int64 `json:"id,omitempty"` + name string `json:"name,omitempty"` + +} diff --git a/samples/client/petstore/go/swagger/User.go b/samples/client/petstore/go/swagger/User.go new file mode 100644 index 000000000000..608ac3606187 --- /dev/null +++ b/samples/client/petstore/go/swagger/User.go @@ -0,0 +1,16 @@ +package swagger + +import ( +) + +type User struct { + id int64 `json:"id,omitempty"` + username string `json:"username,omitempty"` + firstName string `json:"firstName,omitempty"` + lastName string `json:"lastName,omitempty"` + email string `json:"email,omitempty"` + password string `json:"password,omitempty"` + phone string `json:"phone,omitempty"` + userStatus int32 `json:"userStatus,omitempty"` + +} diff --git a/samples/client/petstore/go/swagger/UserApi.go b/samples/client/petstore/go/swagger/UserApi.go new file mode 100644 index 000000000000..4c2c73cb9dc6 --- /dev/null +++ b/samples/client/petstore/go/swagger/UserApi.go @@ -0,0 +1,380 @@ +package swagger + +import ( + "strings" + "fmt" +// "log" + "github.com/dghubble/sling" +) + +type UserApi struct { + basePath string + apiClient ApiClient + sling *sling.Sling +} + +func NewUserApi() *UserApi{ + return &UserApi { + basePath: "http://petstore.swagger.io/v2", + } +} + +func NewUserApiWithBasePath(basePath string) *UserApi{ + return &UserApi { + basePath: basePath, + } +} + +/** + * Create user + * This can only be done by the logged in user. + * @param body Created user object + * @return void + */ +func (a UserApi) createUser (body User) (error) { + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/user" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Creates list of users with given input array + * + * @param body List of user object + * @return void + */ +func (a UserApi) createUsersWithArrayInput (body []User) (error) { + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/user/createWithArray" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Creates list of users with given input array + * + * @param body List of user object + * @return void + */ +func (a UserApi) createUsersWithListInput (body []User) (error) { + + + _sling := a.sling.Post(a.basePath) + + // create path and map variables + path := "/user/createWithList" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Logs user into the system + * + * @param username The user name for login + * @param password The password for login in clear text + * @return string + */ +func (a UserApi) loginUser (username string, password string) (string, error) { + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/user/login" + + + _sling = _sling.Path(path) + + + type QueryParams struct { + username string `url:"username,omitempty"` + password string `url:"password,omitempty"` + + } + + _sling = _sling.QueryStruct(&QueryParams{ username: username,password: password }) + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "", "string") + return req, err + +} +/** + * Logs out current logged in user session + * + * @return void + */ +func (a UserApi) logoutUser () (error) { + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/user/logout" + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Get user by user name + * + * @param username The name that needs to be fetched. Use user1 for testing. + * @return User + */ +func (a UserApi) getUserByName (username string) (User, error) { + + // verify the required parameter 'username' is set + //if username == nil { + // return 0, fmt.Error("Missing the required parameter 'username' when calling getUserByName") + //} + + + _sling := a.sling.Get(a.basePath) + + // create path and map variables + path := "/user/{username}" + //path = regexp.MustCompile("{" + "username" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "username" + "\\}", ApiClient.EscapeString(username)) + path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%b", username), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + //ApiClient.Deserialize(response, "", "User") + return req, err + +} +/** + * Updated user + * This can only be done by the logged in user. + * @param username name that need to be deleted + * @param body Updated user object + * @return void + */ +func (a UserApi) updateUser (username string, body User) (error) { + + // verify the required parameter 'username' is set + //if username == nil { + // return 0, fmt.Error("Missing the required parameter 'username' when calling updateUser") + //} + + + _sling := a.sling.Put(a.basePath) + + // create path and map variables + path := "/user/{username}" + //path = regexp.MustCompile("{" + "username" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "username" + "\\}", ApiClient.EscapeString(username)) + path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%b", username), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + // body params + _sling = _sling.BodyJSON(body) + //b, _ := json.Marshal(body) + //bodyParams["body"] = string(b) + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} +/** + * Delete user + * This can only be done by the logged in user. + * @param username The name that needs to be deleted + * @return void + */ +func (a UserApi) deleteUser (username string) (error) { + + // verify the required parameter 'username' is set + //if username == nil { + // return 0, fmt.Error("Missing the required parameter 'username' when calling deleteUser") + //} + + + _sling := a.sling.Delete(a.basePath) + + // create path and map variables + path := "/user/{username}" + //path = regexp.MustCompile("{" + "username" + "}").ReplaceAllString(path, "$1") + //path = path.Replace("\\{" + "username" + "\\}", ApiClient.EscapeString(username)) + path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%b", username), -1) + + + _sling = _sling.Path(path) + + + + + + //contentTypes := []string { } + + + + + + req, err := _sling.Request() + + /*response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + //if err != nil { + // log.Fatal(err) + //} */ + + // + + return err +} diff --git a/samples/client/petstore/go/test.go b/samples/client/petstore/go/test.go new file mode 100644 index 000000000000..b20f0347354b --- /dev/null +++ b/samples/client/petstore/go/test.go @@ -0,0 +1,14 @@ +package main + + +import ( + "fmt" + "log" + "./swagger" +) + +func main() { + + + fmt.Println("hello world") +} From 3ebefba6784f6cfd5b5d242e9fed7aac3191c0a6 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 21 Dec 2015 16:07:58 +0800 Subject: [PATCH 03/76] better return for golang method --- .../src/main/resources/go/api.mustache | 38 ++-- samples/client/petstore/go/swagger/PetApi.go | 186 +++++++++++------- .../client/petstore/go/swagger/StoreApi.go | 96 +++++---- samples/client/petstore/go/swagger/UserApi.go | 175 ++++++++++------ samples/client/petstore/go/test.go | 11 +- 5 files changed, 316 insertions(+), 190 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/go/api.mustache b/modules/swagger-codegen/src/main/resources/go/api.mustache index 1e18bde85caa..9e0679538fab 100644 --- a/modules/swagger-codegen/src/main/resources/go/api.mustache +++ b/modules/swagger-codegen/src/main/resources/go/api.mustache @@ -2,6 +2,7 @@ package {{invokerPackage}} {{#operations}} import ( +// "encoding/json" "strings" "fmt" // "log" @@ -35,13 +36,8 @@ func New{{classname}}WithBasePath(basePath string) *{{classname}}{ {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} */ +//func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}}error) { func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}}error) { - {{#allParams}}{{#required}} - // verify the required parameter '{{paramName}}' is set - //if {{paramName}} == nil { - // return 0, fmt.Error("Missing the required parameter '{{paramName}}' when calling {{nickname}}") - //} - {{/required}}{{/allParams}} _sling := a.sling.{{httpMethod}}(a.basePath) @@ -54,8 +50,7 @@ func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{ _sling = _sling.Path(path) - {{#hasQueryParams}} - type QueryParams struct { + {{#hasQueryParams}}type QueryParams struct { {{#queryParams}}{{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` {{/queryParams}} } @@ -69,8 +64,7 @@ func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{ //contentTypes := []string { {{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}} } - {{#hasFormParams}} - type FormParams struct { + {{#hasFormParams}}type FormParams struct { {{#formParams}}{{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` {{/formParams}} } @@ -83,16 +77,30 @@ func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{ //bodyParams["{{baseName}}"] = string(b) {{/bodyParams}} - req, err := _sling.Request() + {{#returnType}} + var response {{returnType}} + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("{{operationId}} response: ", response, resp, err) + return response, err + {{/returnType}}{{^returnType}} + resp, err := _sling.Request() + fmt.Println("{{operationId}} response: void, ", resp, err) + return err + {{/returnType}} - /*response, err := a.apiClient.CallApi(a.basePath, path, "{{httpMethod}}", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "{{httpMethod}}", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //{{#returnType}}ApiClient.Deserialize(response, "{{returnContainer}}", "{{returnBaseType}}"){{/returnType}} - {{#returnType}}return req, err{{/returnType}} - {{^returnType}}return err{{/returnType}} + + //{{#returnType}}var response {{returnType}} + //err = json.Unmarshal([]byte(req), &response) + //return response, err{{/returnType}} + //{{^returnType}}return err{{/returnType}} } {{/operation}} {{/operations}} diff --git a/samples/client/petstore/go/swagger/PetApi.go b/samples/client/petstore/go/swagger/PetApi.go index 5170797cc806..cf6f793805fb 100644 --- a/samples/client/petstore/go/swagger/PetApi.go +++ b/samples/client/petstore/go/swagger/PetApi.go @@ -1,6 +1,7 @@ package swagger import ( +// "encoding/json" "strings" "fmt" // "log" @@ -32,8 +33,8 @@ func NewPetApiWithBasePath(basePath string) *PetApi{ * @param body Pet object that needs to be added to the store * @return void */ +//func (a PetApi) updatePet (body Pet) (error) { func (a PetApi) updatePet (body Pet) (error) { - _sling := a.sling.Put(a.basePath) @@ -57,16 +58,23 @@ func (a PetApi) updatePet (body Pet) (error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("updatePet response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Add a new pet to the store @@ -74,8 +82,8 @@ func (a PetApi) updatePet (body Pet) (error) { * @param body Pet object that needs to be added to the store * @return void */ +//func (a PetApi) addPet (body Pet) (error) { func (a PetApi) addPet (body Pet) (error) { - _sling := a.sling.Post(a.basePath) @@ -99,16 +107,23 @@ func (a PetApi) addPet (body Pet) (error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("addPet response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Finds Pets by status @@ -116,8 +131,8 @@ func (a PetApi) addPet (body Pet) (error) { * @param status Status values that need to be considered for filter * @return []Pet */ +//func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { - _sling := a.sling.Get(a.basePath) @@ -127,7 +142,6 @@ func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { _sling = _sling.Path(path) - type QueryParams struct { status []string `url:"status,omitempty"` @@ -144,16 +158,26 @@ func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { - req, err := _sling.Request() + + var response []Pet + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("findPetsByStatus response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "array", "Pet") - return req, err - + + //var response []Pet + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Finds Pets by tags @@ -161,8 +185,8 @@ func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { * @param tags Tags to filter by * @return []Pet */ +//func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { - _sling := a.sling.Get(a.basePath) @@ -172,7 +196,6 @@ func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { _sling = _sling.Path(path) - type QueryParams struct { tags []string `url:"tags,omitempty"` @@ -189,16 +212,26 @@ func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { - req, err := _sling.Request() + + var response []Pet + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("findPetsByTags response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "array", "Pet") - return req, err - + + //var response []Pet + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Find pet by ID @@ -206,13 +239,8 @@ func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { * @param petId ID of pet that needs to be fetched * @return Pet */ +//func (a PetApi) getPetById (petId int64) (Pet, error) { func (a PetApi) getPetById (petId int64) (Pet, error) { - - // verify the required parameter 'petId' is set - //if petId == nil { - // return 0, fmt.Error("Missing the required parameter 'petId' when calling getPetById") - //} - _sling := a.sling.Get(a.basePath) @@ -235,16 +263,26 @@ func (a PetApi) getPetById (petId int64) (Pet, error) { - req, err := _sling.Request() + + var response Pet + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("getPetById response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "", "Pet") - return req, err - + + //var response Pet + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Updates a pet in the store with form data @@ -254,13 +292,8 @@ func (a PetApi) getPetById (petId int64) (Pet, error) { * @param status Updated status of the pet * @return void */ +//func (a PetApi) updatePetWithForm (petId string, name string, status string) (error) { func (a PetApi) updatePetWithForm (petId string, name string, status string) (error) { - - // verify the required parameter 'petId' is set - //if petId == nil { - // return 0, fmt.Error("Missing the required parameter 'petId' when calling updatePetWithForm") - //} - _sling := a.sling.Post(a.basePath) @@ -279,7 +312,6 @@ func (a PetApi) updatePetWithForm (petId string, name string, status string) (er //contentTypes := []string { "application/x-www-form-urlencoded" } - type FormParams struct { name string `url:"name,omitempty"` status string `url:"status,omitempty"` @@ -290,16 +322,23 @@ func (a PetApi) updatePetWithForm (petId string, name string, status string) (er - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("updatePetWithForm response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Deletes a pet @@ -308,13 +347,8 @@ func (a PetApi) updatePetWithForm (petId string, name string, status string) (er * @param apiKey * @return void */ +//func (a PetApi) deletePet (petId int64, apiKey string) (error) { func (a PetApi) deletePet (petId int64, apiKey string) (error) { - - // verify the required parameter 'petId' is set - //if petId == nil { - // return 0, fmt.Error("Missing the required parameter 'petId' when calling deletePet") - //} - _sling := a.sling.Delete(a.basePath) @@ -339,16 +373,23 @@ func (a PetApi) deletePet (petId int64, apiKey string) (error) { - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("deletePet response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * uploads an image @@ -358,13 +399,8 @@ func (a PetApi) deletePet (petId int64, apiKey string) (error) { * @param file file to upload * @return void */ +//func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.File) (error) { func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.File) (error) { - - // verify the required parameter 'petId' is set - //if petId == nil { - // return 0, fmt.Error("Missing the required parameter 'petId' when calling uploadFile") - //} - _sling := a.sling.Post(a.basePath) @@ -383,7 +419,6 @@ func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.Fil //contentTypes := []string { "multipart/form-data" } - type FormParams struct { additionalMetadata string `url:"additionalMetadata,omitempty"` file *os.File `url:"file,omitempty"` @@ -394,14 +429,21 @@ func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.Fil - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("uploadFile response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } diff --git a/samples/client/petstore/go/swagger/StoreApi.go b/samples/client/petstore/go/swagger/StoreApi.go index 987c39a72163..17adb00933b4 100644 --- a/samples/client/petstore/go/swagger/StoreApi.go +++ b/samples/client/petstore/go/swagger/StoreApi.go @@ -1,6 +1,7 @@ package swagger import ( +// "encoding/json" "strings" "fmt" // "log" @@ -30,8 +31,8 @@ func NewStoreApiWithBasePath(basePath string) *StoreApi{ * Returns a map of status codes to quantities * @return map[string]int32 */ +//func (a StoreApi) getInventory () (map[string]int32, error) { func (a StoreApi) getInventory () (map[string]int32, error) { - _sling := a.sling.Get(a.basePath) @@ -51,16 +52,26 @@ func (a StoreApi) getInventory () (map[string]int32, error) { - req, err := _sling.Request() + + var response map[string]int32 + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("getInventory response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "map", "map") - return req, err - + + //var response map[string]int32 + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Place an order for a pet @@ -68,8 +79,8 @@ func (a StoreApi) getInventory () (map[string]int32, error) { * @param body order placed for purchasing the pet * @return Order */ +//func (a StoreApi) placeOrder (body Order) (Order, error) { func (a StoreApi) placeOrder (body Order) (Order, error) { - _sling := a.sling.Post(a.basePath) @@ -93,16 +104,26 @@ func (a StoreApi) placeOrder (body Order) (Order, error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + var response Order + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("placeOrder response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "", "Order") - return req, err - + + //var response Order + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Find purchase order by ID @@ -110,13 +131,8 @@ func (a StoreApi) placeOrder (body Order) (Order, error) { * @param orderId ID of pet that needs to be fetched * @return Order */ +//func (a StoreApi) getOrderById (orderId string) (Order, error) { func (a StoreApi) getOrderById (orderId string) (Order, error) { - - // verify the required parameter 'orderId' is set - //if orderId == nil { - // return 0, fmt.Error("Missing the required parameter 'orderId' when calling getOrderById") - //} - _sling := a.sling.Get(a.basePath) @@ -139,16 +155,26 @@ func (a StoreApi) getOrderById (orderId string) (Order, error) { - req, err := _sling.Request() + + var response Order + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("getOrderById response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "", "Order") - return req, err - + + //var response Order + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Delete purchase order by ID @@ -156,13 +182,8 @@ func (a StoreApi) getOrderById (orderId string) (Order, error) { * @param orderId ID of the order that needs to be deleted * @return void */ +//func (a StoreApi) deleteOrder (orderId string) (error) { func (a StoreApi) deleteOrder (orderId string) (error) { - - // verify the required parameter 'orderId' is set - //if orderId == nil { - // return 0, fmt.Error("Missing the required parameter 'orderId' when calling deleteOrder") - //} - _sling := a.sling.Delete(a.basePath) @@ -185,14 +206,21 @@ func (a StoreApi) deleteOrder (orderId string) (error) { - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("deleteOrder response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } diff --git a/samples/client/petstore/go/swagger/UserApi.go b/samples/client/petstore/go/swagger/UserApi.go index 4c2c73cb9dc6..0a1abeb7827b 100644 --- a/samples/client/petstore/go/swagger/UserApi.go +++ b/samples/client/petstore/go/swagger/UserApi.go @@ -1,6 +1,7 @@ package swagger import ( +// "encoding/json" "strings" "fmt" // "log" @@ -31,8 +32,8 @@ func NewUserApiWithBasePath(basePath string) *UserApi{ * @param body Created user object * @return void */ +//func (a UserApi) createUser (body User) (error) { func (a UserApi) createUser (body User) (error) { - _sling := a.sling.Post(a.basePath) @@ -56,16 +57,23 @@ func (a UserApi) createUser (body User) (error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("createUser response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Creates list of users with given input array @@ -73,8 +81,8 @@ func (a UserApi) createUser (body User) (error) { * @param body List of user object * @return void */ +//func (a UserApi) createUsersWithArrayInput (body []User) (error) { func (a UserApi) createUsersWithArrayInput (body []User) (error) { - _sling := a.sling.Post(a.basePath) @@ -98,16 +106,23 @@ func (a UserApi) createUsersWithArrayInput (body []User) (error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("createUsersWithArrayInput response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Creates list of users with given input array @@ -115,8 +130,8 @@ func (a UserApi) createUsersWithArrayInput (body []User) (error) { * @param body List of user object * @return void */ +//func (a UserApi) createUsersWithListInput (body []User) (error) { func (a UserApi) createUsersWithListInput (body []User) (error) { - _sling := a.sling.Post(a.basePath) @@ -140,16 +155,23 @@ func (a UserApi) createUsersWithListInput (body []User) (error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("createUsersWithListInput response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Logs user into the system @@ -158,8 +180,8 @@ func (a UserApi) createUsersWithListInput (body []User) (error) { * @param password The password for login in clear text * @return string */ +//func (a UserApi) loginUser (username string, password string) (string, error) { func (a UserApi) loginUser (username string, password string) (string, error) { - _sling := a.sling.Get(a.basePath) @@ -169,7 +191,6 @@ func (a UserApi) loginUser (username string, password string) (string, error) { _sling = _sling.Path(path) - type QueryParams struct { username string `url:"username,omitempty"` password string `url:"password,omitempty"` @@ -187,24 +208,34 @@ func (a UserApi) loginUser (username string, password string) (string, error) { - req, err := _sling.Request() + + var response string + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("loginUser response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "", "string") - return req, err - + + //var response string + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Logs out current logged in user session * * @return void */ +//func (a UserApi) logoutUser () (error) { func (a UserApi) logoutUser () (error) { - _sling := a.sling.Get(a.basePath) @@ -224,16 +255,23 @@ func (a UserApi) logoutUser () (error) { - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("logoutUser response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Get user by user name @@ -241,13 +279,8 @@ func (a UserApi) logoutUser () (error) { * @param username The name that needs to be fetched. Use user1 for testing. * @return User */ +//func (a UserApi) getUserByName (username string) (User, error) { func (a UserApi) getUserByName (username string) (User, error) { - - // verify the required parameter 'username' is set - //if username == nil { - // return 0, fmt.Error("Missing the required parameter 'username' when calling getUserByName") - //} - _sling := a.sling.Get(a.basePath) @@ -270,16 +303,26 @@ func (a UserApi) getUserByName (username string) (User, error) { - req, err := _sling.Request() + + var response User + resp, err := _sling.ReceiveSuccess(response) + fmt.Println("getUserByName response: ", response, resp, err) + return response, err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} //ApiClient.Deserialize(response, "", "User") - return req, err - + + //var response User + //err = json.Unmarshal([]byte(req), &response) + //return response, err + // } /** * Updated user @@ -288,13 +331,8 @@ func (a UserApi) getUserByName (username string) (User, error) { * @param body Updated user object * @return void */ +//func (a UserApi) updateUser (username string, body User) (error) { func (a UserApi) updateUser (username string, body User) (error) { - - // verify the required parameter 'username' is set - //if username == nil { - // return 0, fmt.Error("Missing the required parameter 'username' when calling updateUser") - //} - _sling := a.sling.Put(a.basePath) @@ -321,16 +359,23 @@ func (a UserApi) updateUser (username string, body User) (error) { //bodyParams["body"] = string(b) - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("updateUser response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } /** * Delete user @@ -338,13 +383,8 @@ func (a UserApi) updateUser (username string, body User) (error) { * @param username The name that needs to be deleted * @return void */ +//func (a UserApi) deleteUser (username string) (error) { func (a UserApi) deleteUser (username string) (error) { - - // verify the required parameter 'username' is set - //if username == nil { - // return 0, fmt.Error("Missing the required parameter 'username' when calling deleteUser") - //} - _sling := a.sling.Delete(a.basePath) @@ -367,14 +407,21 @@ func (a UserApi) deleteUser (username string) (error) { - req, err := _sling.Request() + + resp, err := _sling.Request() + fmt.Println("deleteUser response: void, ", resp, err) + return err + - /*response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) + + + //response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) //if err != nil { // log.Fatal(err) - //} */ + //} // - - return err + + // + //return err } diff --git a/samples/client/petstore/go/test.go b/samples/client/petstore/go/test.go index b20f0347354b..d1dbf4272a26 100644 --- a/samples/client/petstore/go/test.go +++ b/samples/client/petstore/go/test.go @@ -1,14 +1,15 @@ package main - import ( - "fmt" - "log" - "./swagger" + "fmt" + // "log" + swagger "./swagger" ) func main() { + fmt.Println("hello world") + s := swagger.NewPetApi() + &s.updatePetWithForm("2", "golang", "available") - fmt.Println("hello world") } From 4062deed92f203457766b5df5367bf48ee86788a Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 21 Dec 2015 21:19:12 +0800 Subject: [PATCH 04/76] remove logger, fix deserialization of json response --- .../io/swagger/codegen/DefaultCodegen.java | 2 - .../io/swagger/codegen/DefaultGenerator.java | 4 - .../codegen/languages/GoClientCodegen.java | 16 +- .../src/main/resources/go/api.mustache | 73 ++-- .../client/petstore/go/swagger/Category.go | 4 +- samples/client/petstore/go/swagger/Order.go | 13 +- samples/client/petstore/go/swagger/Pet.go | 12 +- samples/client/petstore/go/swagger/PetApi.go | 400 ++++++------------ .../client/petstore/go/swagger/StoreApi.go | 189 +++------ samples/client/petstore/go/swagger/Tag.go | 4 +- samples/client/petstore/go/swagger/User.go | 16 +- samples/client/petstore/go/swagger/UserApi.go | 365 +++++----------- samples/client/petstore/go/test.go | 11 +- 13 files changed, 351 insertions(+), 758 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 ac91c60fa0f0..11472fec4ff6 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 @@ -1045,8 +1045,6 @@ public class DefaultCodegen { } property.baseType = getSwaggerType(p); - LOGGER.info("property.baseType=" + property.baseType); - LOGGER.info("property.datatype=" + property.datatype); if (p instanceof ArrayProperty) { property.isContainer = true; 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 24c17615f2d4..3623361387ed 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 @@ -657,7 +657,6 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { for (String nextImport : allImports) { Map im = new LinkedHashMap(); String mapping = config.importMapping().get(nextImport); - LOGGER.info("mapping = " + mapping); if (mapping == null) { mapping = config.toModelImport(nextImport); } @@ -704,7 +703,6 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { List> imports = new ArrayList>(); for (String nextImport : allImports) { - LOGGER.info("nextImport=" + nextImport); Map im = new LinkedHashMap(); String mapping = config.importMapping().get(nextImport); if (mapping == null) { @@ -713,14 +711,12 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { if (mapping != null && !config.defaultIncludes().contains(mapping)) { im.put("import", mapping); imports.add(im); - LOGGER.info("config.importMaping added " + mapping); } // add instantiation types mapping = config.instantiationTypes().get(nextImport); if (mapping != null && !config.defaultIncludes().contains(mapping)) { im.put("import", mapping); imports.add(im); - LOGGER.info("config.instantiationTypes added " + mapping); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java index 04401b044e52..c9ec24de6b27 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java @@ -128,8 +128,8 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { return name; // camelize (lower first character) the variable name - // pet_id => petId - name = camelize(name, true); + // pet_id => PetId + name = camelize(name); // for reserved word or word starting with number, append _ if(reservedWords.contains(name) || name.matches("^\\d.*")) @@ -163,7 +163,7 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Property p) { - LOGGER.info("getTypeDeclaration=" + p.getName()); + String swaggerType = getSwaggerType(p); if(p instanceof ArrayProperty) { ArrayProperty ap = (ArrayProperty) p; Property inner = ap.getItems(); @@ -175,14 +175,6 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { return getSwaggerType(p) + "[string]" + getTypeDeclaration(inner); } - LOGGER.info("super.getTypeDeclaration=" + super.getTypeDeclaration(p)); - return super.getTypeDeclaration(p); - } - - @Override - public String getSwaggerType(Property p) { - String swaggerType = super.getSwaggerType(p); - LOGGER.info("swaggerType=" + swaggerType); String type = null; if(typeMapping.containsKey(swaggerType)) { type = typeMapping.get(swaggerType); @@ -200,7 +192,7 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { if(reservedWords.contains(operationId)) throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); - return camelize(operationId, true); + return camelize(operationId); } @Override diff --git a/modules/swagger-codegen/src/main/resources/go/api.mustache b/modules/swagger-codegen/src/main/resources/go/api.mustache index 9e0679538fab..16512786abc9 100644 --- a/modules/swagger-codegen/src/main/resources/go/api.mustache +++ b/modules/swagger-codegen/src/main/resources/go/api.mustache @@ -14,7 +14,7 @@ import ( type {{classname}} struct { basePath string apiClient ApiClient - sling *sling.Sling + //sling *sling.Sling } func New{{classname}}() *{{classname}}{ @@ -39,68 +39,49 @@ func New{{classname}}WithBasePath(basePath string) *{{classname}}{ //func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}}error) { func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}}error) { - _sling := a.sling.{{httpMethod}}(a.basePath) + _sling := sling.New().{{httpMethod}}(a.basePath) // create path and map variables - path := "{{path}}" - {{#pathParams}}//path = regexp.MustCompile("{" + "{{paramName}}" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "{{paramName}}" + "\\}", ApiClient.EscapeString({{{paramName}}})) - path = strings.Replace(path, "{" + "{{baseName}}" + "}", fmt.Sprintf("%b", {{paramName}}), -1) - {{/pathParams}} + path := "{{basePathWithoutHost}}{{path}}" +{{#pathParams}} path = strings.Replace(path, "{" + "{{baseName}}" + "}", fmt.Sprintf("%v", {{paramName}}), -1) +{{/pathParams}} _sling = _sling.Path(path) - {{#hasQueryParams}}type QueryParams struct { +{{#hasQueryParams}} type QueryParams struct { {{#queryParams}}{{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` {{/queryParams}} +} + _sling = _sling.QueryStruct(&QueryParams{ {{#queryParams}}{{paramName}}: {{paramName}}{{#hasMore}},{{/hasMore}}{{/queryParams}} }) +{{/hasQueryParams}} + // accept header + accepts := []string { {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept } - - _sling = _sling.QueryStruct(&QueryParams{ {{#queryParams}}{{paramName}}: {{baseName}}{{#hasMore}},{{/hasMore}}{{/queryParams}} }) - {{/hasQueryParams}} - - {{#headerParams}}// header params "{{baseName}}" +{{#hasHeaderParams}}{{#headerParams}} // header params "{{baseName}}" _sling = _sling.Set("{{baseName}}", {{paramName}}) - {{/headerParams}} - - //contentTypes := []string { {{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}} } - - {{#hasFormParams}}type FormParams struct { - {{#formParams}}{{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` - {{/formParams}} +{{/headerParams}}{{/hasHeaderParams}} +{{#hasFormParams}} type FormParams struct { +{{#formParams}} {{paramName}} {{dataType}} `url:"{{baseName}},omitempty"` +{{/formParams}} } - _sling = _sling.BodyForm(&FormParams{ {{#formParams}}{{paramName}}: {{baseName}}{{#hasMore}},{{/hasMore}}{{/formParams}} }) - {{/hasFormParams}} - - {{#bodyParams}}// body params + _sling = _sling.BodyForm(&FormParams{ {{#formParams}}{{paramName}}: {{paramName}}{{#hasMore}},{{/hasMore}}{{/formParams}} }) +{{/hasFormParams}} +{{#hasBodyParams}}{{#bodyParams}}// body params _sling = _sling.BodyJSON({{paramName}}) - //b, _ := json.Marshal(body) - //bodyParams["{{baseName}}"] = string(b) - {{/bodyParams}} +{{/bodyParams}}{{/hasBodyParams}} - {{#returnType}} - var response {{returnType}} +{{#returnType}} response := new({{returnType}}) resp, err := _sling.ReceiveSuccess(response) fmt.Println("{{operationId}} response: ", response, resp, err) - return response, err - {{/returnType}}{{^returnType}} + return *response, err +{{/returnType}}{{^returnType}} resp, err := _sling.Request() fmt.Println("{{operationId}} response: void, ", resp, err) return err - {{/returnType}} - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "{{httpMethod}}", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //{{#returnType}}ApiClient.Deserialize(response, "{{returnContainer}}", "{{returnBaseType}}"){{/returnType}} - - //{{#returnType}}var response {{returnType}} - //err = json.Unmarshal([]byte(req), &response) - //return response, err{{/returnType}} - //{{^returnType}}return err{{/returnType}} +{{/returnType}} } {{/operation}} {{/operations}} diff --git a/samples/client/petstore/go/swagger/Category.go b/samples/client/petstore/go/swagger/Category.go index 7681d4c5e6fa..0268f62488af 100644 --- a/samples/client/petstore/go/swagger/Category.go +++ b/samples/client/petstore/go/swagger/Category.go @@ -4,7 +4,7 @@ import ( ) type Category struct { - id int64 `json:"id,omitempty"` - name string `json:"name,omitempty"` + Id int64 `json:"id,omitempty"` + Name string `json:"name,omitempty"` } diff --git a/samples/client/petstore/go/swagger/Order.go b/samples/client/petstore/go/swagger/Order.go index 187f3ed57950..254b962de2f1 100644 --- a/samples/client/petstore/go/swagger/Order.go +++ b/samples/client/petstore/go/swagger/Order.go @@ -1,15 +1,14 @@ package swagger import ( - "time" ) type Order struct { - id int64 `json:"id,omitempty"` - petId int64 `json:"petId,omitempty"` - quantity int32 `json:"quantity,omitempty"` - shipDate time.Time `json:"shipDate,omitempty"` - status string `json:"status,omitempty"` - complete bool `json:"complete,omitempty"` + Id int64 `json:"id,omitempty"` + PetId int64 `json:"petId,omitempty"` + Quantity int32 `json:"quantity,omitempty"` + ShipDate time.Time `json:"shipDate,omitempty"` + Status string `json:"status,omitempty"` + Complete bool `json:"complete,omitempty"` } diff --git a/samples/client/petstore/go/swagger/Pet.go b/samples/client/petstore/go/swagger/Pet.go index cbc962df5303..7544eed63847 100644 --- a/samples/client/petstore/go/swagger/Pet.go +++ b/samples/client/petstore/go/swagger/Pet.go @@ -4,11 +4,11 @@ import ( ) type Pet struct { - id int64 `json:"id,omitempty"` - category Category `json:"category,omitempty"` - name string `json:"name,omitempty"` - photoUrls []string `json:"photoUrls,omitempty"` - tags []Tag `json:"tags,omitempty"` - status string `json:"status,omitempty"` + Id int64 `json:"id,omitempty"` + Category Category `json:"category,omitempty"` + Name string `json:"name,omitempty"` + PhotoUrls []string `json:"photoUrls,omitempty"` + Tags []Tag `json:"tags,omitempty"` + Status string `json:"status,omitempty"` } diff --git a/samples/client/petstore/go/swagger/PetApi.go b/samples/client/petstore/go/swagger/PetApi.go index cf6f793805fb..a83f426471d0 100644 --- a/samples/client/petstore/go/swagger/PetApi.go +++ b/samples/client/petstore/go/swagger/PetApi.go @@ -6,13 +6,12 @@ import ( "fmt" // "log" "github.com/dghubble/sling" - "os" ) type PetApi struct { basePath string apiClient ApiClient - sling *sling.Sling + //sling *sling.Sling } func NewPetApi() *PetApi{ @@ -30,420 +29,271 @@ func NewPetApiWithBasePath(basePath string) *PetApi{ /** * Update an existing pet * - * @param body Pet object that needs to be added to the store + * @param Body Pet object that needs to be added to the store * @return void */ -//func (a PetApi) updatePet (body Pet) (error) { -func (a PetApi) updatePet (body Pet) (error) { +//func (a PetApi) UpdatePet (Body Pet) (error) { +func (a PetApi) UpdatePet (Body Pet) (error) { - _sling := a.sling.Put(a.basePath) + _sling := sling.New().Put(a.basePath) // create path and map variables - path := "/pet" - + path := "/v2/pet" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { "application/json","application/xml" } - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - resp, err := _sling.Request() - fmt.Println("updatePet response: void, ", resp, err) + fmt.Println("UpdatePet response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Add a new pet to the store * - * @param body Pet object that needs to be added to the store + * @param Body Pet object that needs to be added to the store * @return void */ -//func (a PetApi) addPet (body Pet) (error) { -func (a PetApi) addPet (body Pet) (error) { +//func (a PetApi) AddPet (Body Pet) (error) { +func (a PetApi) AddPet (Body Pet) (error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/pet" - + path := "/v2/pet" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { "application/json","application/xml" } - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - resp, err := _sling.Request() - fmt.Println("addPet response: void, ", resp, err) + fmt.Println("AddPet response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Finds Pets by status * Multiple status values can be provided with comma seperated strings - * @param status Status values that need to be considered for filter + * @param Status Status values that need to be considered for filter * @return []Pet */ -//func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { -func (a PetApi) findPetsByStatus (status []string) ([]Pet, error) { +//func (a PetApi) FindPetsByStatus (Status []string) ([]Pet, error) { +func (a PetApi) FindPetsByStatus (Status []string) ([]Pet, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/pet/findByStatus" - + path := "/v2/pet/findByStatus" _sling = _sling.Path(path) type QueryParams struct { - status []string `url:"status,omitempty"` + Status []string `url:"status,omitempty"` +} + _sling = _sling.QueryStruct(&QueryParams{ Status: Status }) + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept } - _sling = _sling.QueryStruct(&QueryParams{ status: status }) - - - //contentTypes := []string { } - - - - - - - var response []Pet + response := new([]Pet) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("findPetsByStatus response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "array", "Pet") - - //var response []Pet - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("FindPetsByStatus response: ", response, resp, err) + return *response, err } /** * Finds Pets by tags * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - * @param tags Tags to filter by + * @param Tags Tags to filter by * @return []Pet */ -//func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { -func (a PetApi) findPetsByTags (tags []string) ([]Pet, error) { +//func (a PetApi) FindPetsByTags (Tags []string) ([]Pet, error) { +func (a PetApi) FindPetsByTags (Tags []string) ([]Pet, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/pet/findByTags" - + path := "/v2/pet/findByTags" _sling = _sling.Path(path) type QueryParams struct { - tags []string `url:"tags,omitempty"` + Tags []string `url:"tags,omitempty"` +} + _sling = _sling.QueryStruct(&QueryParams{ Tags: Tags }) + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept } - _sling = _sling.QueryStruct(&QueryParams{ tags: tags }) - - - //contentTypes := []string { } - - - - - - - var response []Pet + response := new([]Pet) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("findPetsByTags response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "array", "Pet") - - //var response []Pet - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("FindPetsByTags response: ", response, resp, err) + return *response, err } /** * Find pet by ID * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - * @param petId ID of pet that needs to be fetched + * @param PetId ID of pet that needs to be fetched * @return Pet */ -//func (a PetApi) getPetById (petId int64) (Pet, error) { -func (a PetApi) getPetById (petId int64) (Pet, error) { +//func (a PetApi) GetPetById (PetId int64) (Pet, error) { +func (a PetApi) GetPetById (PetId int64) (Pet, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/pet/{petId}" - //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) - path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) - + path := "/v2/pet/{petId}" + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%v", PetId), -1) _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - - - var response Pet + response := new(Pet) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("getPetById response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "", "Pet") - - //var response Pet - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("GetPetById response: ", response, resp, err) + return *response, err } /** * Updates a pet in the store with form data * - * @param petId ID of pet that needs to be updated - * @param name Updated name of the pet - * @param status Updated status of the pet + * @param PetId ID of pet that needs to be updated + * @param Name Updated name of the pet + * @param Status Updated status of the pet * @return void */ -//func (a PetApi) updatePetWithForm (petId string, name string, status string) (error) { -func (a PetApi) updatePetWithForm (petId string, name string, status string) (error) { +//func (a PetApi) UpdatePetWithForm (PetId string, Name string, Status string) (error) { +func (a PetApi) UpdatePetWithForm (PetId string, Name string, Status string) (error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/pet/{petId}" - //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) - path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) - + path := "/v2/pet/{petId}" + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%v", PetId), -1) _sling = _sling.Path(path) - - - - - //contentTypes := []string { "application/x-www-form-urlencoded" } + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } type FormParams struct { - name string `url:"name,omitempty"` - status string `url:"status,omitempty"` - + Name string `url:"name,omitempty"` + Status string `url:"status,omitempty"` } - _sling = _sling.BodyForm(&FormParams{ name: name,status: status }) - + _sling = _sling.BodyForm(&FormParams{ Name: Name,Status: Status }) + - - resp, err := _sling.Request() - fmt.Println("updatePetWithForm response: void, ", resp, err) + fmt.Println("UpdatePetWithForm response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Deletes a pet * - * @param petId Pet id to delete - * @param apiKey + * @param PetId Pet id to delete + * @param ApiKey * @return void */ -//func (a PetApi) deletePet (petId int64, apiKey string) (error) { -func (a PetApi) deletePet (petId int64, apiKey string) (error) { +//func (a PetApi) DeletePet (PetId int64, ApiKey string) (error) { +func (a PetApi) DeletePet (PetId int64, ApiKey string) (error) { - _sling := a.sling.Delete(a.basePath) + _sling := sling.New().Delete(a.basePath) // create path and map variables - path := "/pet/{petId}" - //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) - path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) - + path := "/v2/pet/{petId}" + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%v", PetId), -1) _sling = _sling.Path(path) - - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } // header params "api_key" - _sling = _sling.Set("api_key", apiKey) - + _sling = _sling.Set("api_key", ApiKey) - //contentTypes := []string { } - - - resp, err := _sling.Request() - fmt.Println("deletePet response: void, ", resp, err) + fmt.Println("DeletePet response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * uploads an image * - * @param petId ID of pet to update - * @param additionalMetadata Additional data to pass to server - * @param file file to upload + * @param PetId ID of pet to update + * @param AdditionalMetadata Additional data to pass to server + * @param File file to upload * @return void */ -//func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.File) (error) { -func (a PetApi) uploadFile (petId int64, additionalMetadata string, file *os.File) (error) { +//func (a PetApi) UploadFile (PetId int64, AdditionalMetadata string, File *os.File) (error) { +func (a PetApi) UploadFile (PetId int64, AdditionalMetadata string, File *os.File) (error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/pet/{petId}/uploadImage" - //path = regexp.MustCompile("{" + "petId" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "petId" + "\\}", ApiClient.EscapeString(petId)) - path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%b", petId), -1) - + path := "/v2/pet/{petId}/uploadImage" + path = strings.Replace(path, "{" + "petId" + "}", fmt.Sprintf("%v", PetId), -1) _sling = _sling.Path(path) - - - - - //contentTypes := []string { "multipart/form-data" } + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } type FormParams struct { - additionalMetadata string `url:"additionalMetadata,omitempty"` - file *os.File `url:"file,omitempty"` - + AdditionalMetadata string `url:"additionalMetadata,omitempty"` + File *os.File `url:"file,omitempty"` } - _sling = _sling.BodyForm(&FormParams{ additionalMetadata: additionalMetadata,file: file }) - + _sling = _sling.BodyForm(&FormParams{ AdditionalMetadata: AdditionalMetadata,File: File }) + - - resp, err := _sling.Request() - fmt.Println("uploadFile response: void, ", resp, err) + fmt.Println("UploadFile response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } diff --git a/samples/client/petstore/go/swagger/StoreApi.go b/samples/client/petstore/go/swagger/StoreApi.go index 17adb00933b4..1682b6ce16a4 100644 --- a/samples/client/petstore/go/swagger/StoreApi.go +++ b/samples/client/petstore/go/swagger/StoreApi.go @@ -11,7 +11,7 @@ import ( type StoreApi struct { basePath string apiClient ApiClient - sling *sling.Sling + //sling *sling.Sling } func NewStoreApi() *StoreApi{ @@ -31,196 +31,119 @@ func NewStoreApiWithBasePath(basePath string) *StoreApi{ * Returns a map of status codes to quantities * @return map[string]int32 */ -//func (a StoreApi) getInventory () (map[string]int32, error) { -func (a StoreApi) getInventory () (map[string]int32, error) { +//func (a StoreApi) GetInventory () (map[string]int32, error) { +func (a StoreApi) GetInventory () (map[string]int32, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/store/inventory" - + path := "/v2/store/inventory" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - - - var response map[string]int32 + response := new(map[string]int32) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("getInventory response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "map", "map") - - //var response map[string]int32 - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("GetInventory response: ", response, resp, err) + return *response, err } /** * Place an order for a pet * - * @param body order placed for purchasing the pet + * @param Body order placed for purchasing the pet * @return Order */ -//func (a StoreApi) placeOrder (body Order) (Order, error) { -func (a StoreApi) placeOrder (body Order) (Order, error) { +//func (a StoreApi) PlaceOrder (Body Order) (Order, error) { +func (a StoreApi) PlaceOrder (Body Order) (Order, error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/store/order" - + path := "/v2/store/order" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - - var response Order + response := new(Order) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("placeOrder response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "", "Order") - - //var response Order - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("PlaceOrder response: ", response, resp, err) + return *response, err } /** * Find purchase order by ID * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * @param orderId ID of pet that needs to be fetched + * @param OrderId ID of pet that needs to be fetched * @return Order */ -//func (a StoreApi) getOrderById (orderId string) (Order, error) { -func (a StoreApi) getOrderById (orderId string) (Order, error) { +//func (a StoreApi) GetOrderById (OrderId string) (Order, error) { +func (a StoreApi) GetOrderById (OrderId string) (Order, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/store/order/{orderId}" - //path = regexp.MustCompile("{" + "orderId" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "orderId" + "\\}", ApiClient.EscapeString(orderId)) - path = strings.Replace(path, "{" + "orderId" + "}", fmt.Sprintf("%b", orderId), -1) - + path := "/v2/store/order/{orderId}" + path = strings.Replace(path, "{" + "orderId" + "}", fmt.Sprintf("%v", OrderId), -1) _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - - - var response Order + response := new(Order) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("getOrderById response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "", "Order") - - //var response Order - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("GetOrderById response: ", response, resp, err) + return *response, err } /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * @param orderId ID of the order that needs to be deleted + * @param OrderId ID of the order that needs to be deleted * @return void */ -//func (a StoreApi) deleteOrder (orderId string) (error) { -func (a StoreApi) deleteOrder (orderId string) (error) { +//func (a StoreApi) DeleteOrder (OrderId string) (error) { +func (a StoreApi) DeleteOrder (OrderId string) (error) { - _sling := a.sling.Delete(a.basePath) + _sling := sling.New().Delete(a.basePath) // create path and map variables - path := "/store/order/{orderId}" - //path = regexp.MustCompile("{" + "orderId" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "orderId" + "\\}", ApiClient.EscapeString(orderId)) - path = strings.Replace(path, "{" + "orderId" + "}", fmt.Sprintf("%b", orderId), -1) - + path := "/v2/store/order/{orderId}" + path = strings.Replace(path, "{" + "orderId" + "}", fmt.Sprintf("%v", OrderId), -1) _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - resp, err := _sling.Request() - fmt.Println("deleteOrder response: void, ", resp, err) + fmt.Println("DeleteOrder response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } diff --git a/samples/client/petstore/go/swagger/Tag.go b/samples/client/petstore/go/swagger/Tag.go index 7fd20f55ef4e..6b505272a15d 100644 --- a/samples/client/petstore/go/swagger/Tag.go +++ b/samples/client/petstore/go/swagger/Tag.go @@ -4,7 +4,7 @@ import ( ) type Tag struct { - id int64 `json:"id,omitempty"` - name string `json:"name,omitempty"` + Id int64 `json:"id,omitempty"` + Name string `json:"name,omitempty"` } diff --git a/samples/client/petstore/go/swagger/User.go b/samples/client/petstore/go/swagger/User.go index 608ac3606187..e7f26d1d10c2 100644 --- a/samples/client/petstore/go/swagger/User.go +++ b/samples/client/petstore/go/swagger/User.go @@ -4,13 +4,13 @@ import ( ) type User struct { - id int64 `json:"id,omitempty"` - username string `json:"username,omitempty"` - firstName string `json:"firstName,omitempty"` - lastName string `json:"lastName,omitempty"` - email string `json:"email,omitempty"` - password string `json:"password,omitempty"` - phone string `json:"phone,omitempty"` - userStatus int32 `json:"userStatus,omitempty"` + Id int64 `json:"id,omitempty"` + Username string `json:"username,omitempty"` + FirstName string `json:"firstName,omitempty"` + LastName string `json:"lastName,omitempty"` + Email string `json:"email,omitempty"` + Password string `json:"password,omitempty"` + Phone string `json:"phone,omitempty"` + UserStatus int32 `json:"userStatus,omitempty"` } diff --git a/samples/client/petstore/go/swagger/UserApi.go b/samples/client/petstore/go/swagger/UserApi.go index 0a1abeb7827b..31c26c7b6e70 100644 --- a/samples/client/petstore/go/swagger/UserApi.go +++ b/samples/client/petstore/go/swagger/UserApi.go @@ -11,7 +11,7 @@ import ( type UserApi struct { basePath string apiClient ApiClient - sling *sling.Sling + //sling *sling.Sling } func NewUserApi() *UserApi{ @@ -29,399 +29,250 @@ func NewUserApiWithBasePath(basePath string) *UserApi{ /** * Create user * This can only be done by the logged in user. - * @param body Created user object + * @param Body Created user object * @return void */ -//func (a UserApi) createUser (body User) (error) { -func (a UserApi) createUser (body User) (error) { +//func (a UserApi) CreateUser (Body User) (error) { +func (a UserApi) CreateUser (Body User) (error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/user" - + path := "/v2/user" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - resp, err := _sling.Request() - fmt.Println("createUser response: void, ", resp, err) + fmt.Println("CreateUser response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Creates list of users with given input array * - * @param body List of user object + * @param Body List of user object * @return void */ -//func (a UserApi) createUsersWithArrayInput (body []User) (error) { -func (a UserApi) createUsersWithArrayInput (body []User) (error) { +//func (a UserApi) CreateUsersWithArrayInput (Body []User) (error) { +func (a UserApi) CreateUsersWithArrayInput (Body []User) (error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/user/createWithArray" - + path := "/v2/user/createWithArray" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - resp, err := _sling.Request() - fmt.Println("createUsersWithArrayInput response: void, ", resp, err) + fmt.Println("CreateUsersWithArrayInput response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Creates list of users with given input array * - * @param body List of user object + * @param Body List of user object * @return void */ -//func (a UserApi) createUsersWithListInput (body []User) (error) { -func (a UserApi) createUsersWithListInput (body []User) (error) { +//func (a UserApi) CreateUsersWithListInput (Body []User) (error) { +func (a UserApi) CreateUsersWithListInput (Body []User) (error) { - _sling := a.sling.Post(a.basePath) + _sling := sling.New().Post(a.basePath) // create path and map variables - path := "/user/createWithList" - + path := "/v2/user/createWithList" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - resp, err := _sling.Request() - fmt.Println("createUsersWithListInput response: void, ", resp, err) + fmt.Println("CreateUsersWithListInput response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Post", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Logs user into the system * - * @param username The user name for login - * @param password The password for login in clear text + * @param Username The user name for login + * @param Password The password for login in clear text * @return string */ -//func (a UserApi) loginUser (username string, password string) (string, error) { -func (a UserApi) loginUser (username string, password string) (string, error) { +//func (a UserApi) LoginUser (Username string, Password string) (string, error) { +func (a UserApi) LoginUser (Username string, Password string) (string, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/user/login" - + path := "/v2/user/login" _sling = _sling.Path(path) type QueryParams struct { - username string `url:"username,omitempty"` - password string `url:"password,omitempty"` + Username string `url:"username,omitempty"` + Password string `url:"password,omitempty"` +} + _sling = _sling.QueryStruct(&QueryParams{ Username: Username,Password: Password }) + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept } - _sling = _sling.QueryStruct(&QueryParams{ username: username,password: password }) - - - //contentTypes := []string { } - - - - - - - var response string + response := new(string) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("loginUser response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "", "string") - - //var response string - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("LoginUser response: ", response, resp, err) + return *response, err } /** * Logs out current logged in user session * * @return void */ -//func (a UserApi) logoutUser () (error) { -func (a UserApi) logoutUser () (error) { +//func (a UserApi) LogoutUser () (error) { +func (a UserApi) LogoutUser () (error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/user/logout" - + path := "/v2/user/logout" _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - resp, err := _sling.Request() - fmt.Println("logoutUser response: void, ", resp, err) + fmt.Println("LogoutUser response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * 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 */ -//func (a UserApi) getUserByName (username string) (User, error) { -func (a UserApi) getUserByName (username string) (User, error) { +//func (a UserApi) GetUserByName (Username string) (User, error) { +func (a UserApi) GetUserByName (Username string) (User, error) { - _sling := a.sling.Get(a.basePath) + _sling := sling.New().Get(a.basePath) // create path and map variables - path := "/user/{username}" - //path = regexp.MustCompile("{" + "username" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "username" + "\\}", ApiClient.EscapeString(username)) - path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%b", username), -1) - + path := "/v2/user/{username}" + path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%v", Username), -1) _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - - - var response User + response := new(User) resp, err := _sling.ReceiveSuccess(response) - fmt.Println("getUserByName response: ", response, resp, err) - return response, err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Get", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - //ApiClient.Deserialize(response, "", "User") - - //var response User - //err = json.Unmarshal([]byte(req), &response) - //return response, err - // + fmt.Println("GetUserByName response: ", response, resp, err) + return *response, err } /** * Updated user * This can only be done by the logged in user. - * @param username name that need to be deleted - * @param body Updated user object + * @param Username name that need to be deleted + * @param Body Updated user object * @return void */ -//func (a UserApi) updateUser (username string, body User) (error) { -func (a UserApi) updateUser (username string, body User) (error) { +//func (a UserApi) UpdateUser (Username string, Body User) (error) { +func (a UserApi) UpdateUser (Username string, Body User) (error) { - _sling := a.sling.Put(a.basePath) + _sling := sling.New().Put(a.basePath) // create path and map variables - path := "/user/{username}" - //path = regexp.MustCompile("{" + "username" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "username" + "\\}", ApiClient.EscapeString(username)) - path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%b", username), -1) - + path := "/v2/user/{username}" + path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%v", Username), -1) _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - // body params - _sling = _sling.BodyJSON(body) - //b, _ := json.Marshal(body) - //bodyParams["body"] = string(b) - - - resp, err := _sling.Request() - fmt.Println("updateUser response: void, ", resp, err) + fmt.Println("UpdateUser response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Put", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } /** * Delete user * This can only be done by the logged in user. - * @param username The name that needs to be deleted + * @param Username The name that needs to be deleted * @return void */ -//func (a UserApi) deleteUser (username string) (error) { -func (a UserApi) deleteUser (username string) (error) { +//func (a UserApi) DeleteUser (Username string) (error) { +func (a UserApi) DeleteUser (Username string) (error) { - _sling := a.sling.Delete(a.basePath) + _sling := sling.New().Delete(a.basePath) // create path and map variables - path := "/user/{username}" - //path = regexp.MustCompile("{" + "username" + "}").ReplaceAllString(path, "$1") - //path = path.Replace("\\{" + "username" + "\\}", ApiClient.EscapeString(username)) - path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%b", username), -1) - + path := "/v2/user/{username}" + path = strings.Replace(path, "{" + "username" + "}", fmt.Sprintf("%v", Username), -1) _sling = _sling.Path(path) - + // accept header + accepts := []string { "application/json", "application/xml" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } - - //contentTypes := []string { } - - - - resp, err := _sling.Request() - fmt.Println("deleteUser response: void, ", resp, err) + fmt.Println("DeleteUser response: void, ", resp, err) return err - - - - - //response, err := a.apiClient.CallApi(a.basePath, path, "Delete", queryParams, headerParams, formParams, fileParams, bodyParams, contentTypes) - //if err != nil { - // log.Fatal(err) - //} - - // - - // - //return err } diff --git a/samples/client/petstore/go/test.go b/samples/client/petstore/go/test.go index d1dbf4272a26..f28a510f3cce 100644 --- a/samples/client/petstore/go/test.go +++ b/samples/client/petstore/go/test.go @@ -1,15 +1,18 @@ package main import ( + sw "./swagger" "fmt" - // "log" - swagger "./swagger" ) func main() { fmt.Println("hello world") - s := swagger.NewPetApi() - &s.updatePetWithForm("2", "golang", "available") + s := sw.NewPetApi() + //s.UpdatePetWithForm("2", "golang", "available") + + // test Get + resp, err := s.GetPetById(3) + fmt.Println("GetPetById: ", resp, err) } From 0d377507b4bce9b89e0cfe85498c5e6a43bd00fa Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 21 Dec 2015 22:32:54 +0800 Subject: [PATCH 05/76] fix post model and update test --- .../codegen/languages/GoClientCodegen.java | 7 +++- .../src/main/resources/go/api.mustache | 12 +++--- samples/client/petstore/go/swagger/Order.go | 1 + samples/client/petstore/go/swagger/PetApi.go | 37 +++++++++-------- .../client/petstore/go/swagger/StoreApi.go | 18 +++++---- samples/client/petstore/go/swagger/UserApi.go | 40 +++++++++++-------- samples/client/petstore/go/test.go | 16 ++++++-- 7 files changed, 81 insertions(+), 50 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java index c9ec24de6b27..81008d552cba 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java @@ -163,7 +163,6 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Property p) { - String swaggerType = getSwaggerType(p); if(p instanceof ArrayProperty) { ArrayProperty ap = (ArrayProperty) p; Property inner = ap.getItems(); @@ -175,6 +174,12 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { return getSwaggerType(p) + "[string]" + getTypeDeclaration(inner); } + return super.getTypeDeclaration(p); + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); String type = null; if(typeMapping.containsKey(swaggerType)) { type = typeMapping.get(swaggerType); diff --git a/modules/swagger-codegen/src/main/resources/go/api.mustache b/modules/swagger-codegen/src/main/resources/go/api.mustache index 16512786abc9..d009ad10ef28 100644 --- a/modules/swagger-codegen/src/main/resources/go/api.mustache +++ b/modules/swagger-codegen/src/main/resources/go/api.mustache @@ -69,17 +69,17 @@ func (a {{classname}}) {{nickname}} ({{#allParams}}{{paramName}} {{{dataType}}}{ } _sling = _sling.BodyForm(&FormParams{ {{#formParams}}{{paramName}}: {{paramName}}{{#hasMore}},{{/hasMore}}{{/formParams}} }) {{/hasFormParams}} -{{#hasBodyParams}}{{#bodyParams}}// body params +{{#hasBodyParam}}{{#bodyParams}}// body params _sling = _sling.BodyJSON({{paramName}}) -{{/bodyParams}}{{/hasBodyParams}} +{{/bodyParams}}{{/hasBodyParam}} {{#returnType}} response := new({{returnType}}) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("{{operationId}} response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("{{operationId}} response: ", response, resp, err) return *response, err {{/returnType}}{{^returnType}} - resp, err := _sling.Request() - fmt.Println("{{operationId}} response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("{{operationId}} response: void, ", resp, err) return err {{/returnType}} } diff --git a/samples/client/petstore/go/swagger/Order.go b/samples/client/petstore/go/swagger/Order.go index 254b962de2f1..9db0f945110b 100644 --- a/samples/client/petstore/go/swagger/Order.go +++ b/samples/client/petstore/go/swagger/Order.go @@ -1,6 +1,7 @@ package swagger import ( + "time" ) type Order struct { diff --git a/samples/client/petstore/go/swagger/PetApi.go b/samples/client/petstore/go/swagger/PetApi.go index a83f426471d0..a4ed5033d570 100644 --- a/samples/client/petstore/go/swagger/PetApi.go +++ b/samples/client/petstore/go/swagger/PetApi.go @@ -6,6 +6,7 @@ import ( "fmt" // "log" "github.com/dghubble/sling" + "os" ) type PetApi struct { @@ -49,11 +50,13 @@ func (a PetApi) UpdatePet (Body Pet) (error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) - resp, err := _sling.Request() - fmt.Println("UpdatePet response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("UpdatePet response: void, ", resp, err) return err } /** @@ -79,11 +82,13 @@ func (a PetApi) AddPet (Body Pet) (error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) - resp, err := _sling.Request() - fmt.Println("AddPet response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("AddPet response: void, ", resp, err) return err } /** @@ -117,8 +122,8 @@ func (a PetApi) FindPetsByStatus (Status []string) ([]Pet, error) { response := new([]Pet) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("FindPetsByStatus response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("FindPetsByStatus response: ", response, resp, err) return *response, err } /** @@ -152,8 +157,8 @@ func (a PetApi) FindPetsByTags (Tags []string) ([]Pet, error) { response := new([]Pet) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("FindPetsByTags response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("FindPetsByTags response: ", response, resp, err) return *response, err } /** @@ -183,8 +188,8 @@ func (a PetApi) GetPetById (PetId int64) (Pet, error) { response := new(Pet) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("GetPetById response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("GetPetById response: ", response, resp, err) return *response, err } /** @@ -221,8 +226,8 @@ func (a PetApi) UpdatePetWithForm (PetId string, Name string, Status string) (er - resp, err := _sling.Request() - fmt.Println("UpdatePetWithForm response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("UpdatePetWithForm response: void, ", resp, err) return err } /** @@ -255,8 +260,8 @@ func (a PetApi) DeletePet (PetId int64, ApiKey string) (error) { - resp, err := _sling.Request() - fmt.Println("DeletePet response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("DeletePet response: void, ", resp, err) return err } /** @@ -293,7 +298,7 @@ func (a PetApi) UploadFile (PetId int64, AdditionalMetadata string, File *os.Fil - resp, err := _sling.Request() - fmt.Println("UploadFile response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("UploadFile response: void, ", resp, err) return err } diff --git a/samples/client/petstore/go/swagger/StoreApi.go b/samples/client/petstore/go/swagger/StoreApi.go index 1682b6ce16a4..4af27d02b7ab 100644 --- a/samples/client/petstore/go/swagger/StoreApi.go +++ b/samples/client/petstore/go/swagger/StoreApi.go @@ -51,8 +51,8 @@ func (a StoreApi) GetInventory () (map[string]int32, error) { response := new(map[string]int32) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("GetInventory response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("GetInventory response: ", response, resp, err) return *response, err } /** @@ -78,11 +78,13 @@ func (a StoreApi) PlaceOrder (Body Order) (Order, error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) response := new(Order) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("PlaceOrder response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("PlaceOrder response: ", response, resp, err) return *response, err } /** @@ -112,8 +114,8 @@ func (a StoreApi) GetOrderById (OrderId string) (Order, error) { response := new(Order) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("GetOrderById response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("GetOrderById response: ", response, resp, err) return *response, err } /** @@ -143,7 +145,7 @@ func (a StoreApi) DeleteOrder (OrderId string) (error) { - resp, err := _sling.Request() - fmt.Println("DeleteOrder response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("DeleteOrder response: void, ", resp, err) return err } diff --git a/samples/client/petstore/go/swagger/UserApi.go b/samples/client/petstore/go/swagger/UserApi.go index 31c26c7b6e70..c5da3c81b6d9 100644 --- a/samples/client/petstore/go/swagger/UserApi.go +++ b/samples/client/petstore/go/swagger/UserApi.go @@ -49,11 +49,13 @@ func (a UserApi) CreateUser (Body User) (error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) - resp, err := _sling.Request() - fmt.Println("CreateUser response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("CreateUser response: void, ", resp, err) return err } /** @@ -79,11 +81,13 @@ func (a UserApi) CreateUsersWithArrayInput (Body []User) (error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) - resp, err := _sling.Request() - fmt.Println("CreateUsersWithArrayInput response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("CreateUsersWithArrayInput response: void, ", resp, err) return err } /** @@ -109,11 +113,13 @@ func (a UserApi) CreateUsersWithListInput (Body []User) (error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) - resp, err := _sling.Request() - fmt.Println("CreateUsersWithListInput response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("CreateUsersWithListInput response: void, ", resp, err) return err } /** @@ -149,8 +155,8 @@ func (a UserApi) LoginUser (Username string, Password string) (string, error) { response := new(string) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("LoginUser response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("LoginUser response: ", response, resp, err) return *response, err } /** @@ -178,8 +184,8 @@ func (a UserApi) LogoutUser () (error) { - resp, err := _sling.Request() - fmt.Println("LogoutUser response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("LogoutUser response: void, ", resp, err) return err } /** @@ -209,8 +215,8 @@ func (a UserApi) GetUserByName (Username string) (User, error) { response := new(User) - resp, err := _sling.ReceiveSuccess(response) - fmt.Println("GetUserByName response: ", response, resp, err) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("GetUserByName response: ", response, resp, err) return *response, err } /** @@ -238,11 +244,13 @@ func (a UserApi) UpdateUser (Username string, Body User) (error) { break // only use the first Accept } +// body params + _sling = _sling.BodyJSON(Body) - resp, err := _sling.Request() - fmt.Println("UpdateUser response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("UpdateUser response: void, ", resp, err) return err } /** @@ -272,7 +280,7 @@ func (a UserApi) DeleteUser (Username string) (error) { - resp, err := _sling.Request() - fmt.Println("DeleteUser response: void, ", resp, err) + _, err := _sling.ReceiveSuccess(nil) + //fmt.Println("DeleteUser response: void, ", resp, err) return err } diff --git a/samples/client/petstore/go/test.go b/samples/client/petstore/go/test.go index f28a510f3cce..a2f72ca9ef3a 100644 --- a/samples/client/petstore/go/test.go +++ b/samples/client/petstore/go/test.go @@ -2,16 +2,26 @@ package main import ( sw "./swagger" + "encoding/json" "fmt" ) func main() { - fmt.Println("hello world") s := sw.NewPetApi() - //s.UpdatePetWithForm("2", "golang", "available") - // test Get + // test POST(body) + newPet := (sw.Pet{Id: 12830, Name: "gopher", + PhotoUrls: []string{"http://1.com", "http://2.com"}, Status: "pending"}) + + jsonNewPet, _ := json.Marshal(newPet) + fmt.Println("newPet:", string(jsonNewPet)) + s.AddPet(newPet) + + // test POST(form) + s.UpdatePetWithForm("12830", "golang", "available") + + // test GET resp, err := s.GetPetById(3) fmt.Println("GetPetById: ", resp, err) From 6b2f15b2cf342377bba4679ef2f7a094a7c29231 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 22 Dec 2015 00:12:18 +0800 Subject: [PATCH 06/76] add packageName support to golang --- .../codegen/languages/GoClientCodegen.java | 61 ++++++++++++++----- .../src/main/resources/go/README.mustache | 12 ++++ .../src/main/resources/go/api.mustache | 6 +- .../src/main/resources/go/model.mustache | 2 +- .../client/petstore/go/swagger/ApiClient.go | 33 ---------- samples/client/petstore/go/swagger/PetApi.go | 33 ++++++++-- .../client/petstore/go/swagger/StoreApi.go | 4 -- samples/client/petstore/go/swagger/UserApi.go | 4 -- 8 files changed, 89 insertions(+), 66 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/go/README.mustache delete mode 100644 samples/client/petstore/go/swagger/ApiClient.go diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java index 81008d552cba..a7488983d400 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/GoClientCodegen.java @@ -16,10 +16,8 @@ import org.slf4j.LoggerFactory; public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { static Logger LOGGER = LoggerFactory.getLogger(GoClientCodegen.class); - protected String invokerPackage = "swagger"; - protected String groupId = "io.swagger"; - protected String artifactId = "swagger-go-client"; - protected String artifactVersion = "1.0.0"; + protected String packageName = "swagger"; + protected String packageVersion = "1.0.0"; public CodegenType getTag() { return CodegenType.CLIENT; @@ -39,8 +37,6 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { modelTemplateFiles.put("model.mustache", ".go"); apiTemplateFiles.put("api.mustache", ".go"); templateDir = "go"; - apiPackage = invokerPackage; - modelPackage = invokerPackage; reservedWords = new HashSet ( Arrays.asList( @@ -51,11 +47,6 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { "continue", "for", "import", "return", "var") ); - additionalProperties.put("invokerPackage", invokerPackage); - /*additionalProperties.put("groupId", groupId); - additionalProperties.put("artifactId", artifactId); - additionalProperties.put("artifactVersion", artifactVersion);*/ - defaultIncludes = new HashSet( Arrays.asList( "map", @@ -94,16 +85,48 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("Date", "time.Time"); typeMapping.put("DateTime", "time.Time"); typeMapping.put("password", "string"); + typeMapping.put("File", "*os.File"); typeMapping.put("file", "*os.File"); - //typeMapping.put("array", "array"); - //typeMapping.put("map", "map"); importMapping = new HashMap(); importMapping.put("time.Time", "time"); importMapping.put("*os.File", "os"); + cliOptions.clear(); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "Go package name (convention: lowercase).") + .defaultValue("swagger")); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "Go package version.") + .defaultValue("1.0.0")); + } + @Override + public void processOpts() { + //super.processOpts(); + + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); + } + else { + setPackageName("swagger"); + } + + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { + setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); + } + else { + setPackageVersion("1.0.0"); + } + + additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); + additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); + + modelPackage = packageName; + apiPackage = packageName; + + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + } + @Override public String escapeReservedWord(String name) { return "_" + name; @@ -111,11 +134,11 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String apiFileFolder() { - return outputFolder + File.separator + invokerPackage; + return outputFolder + File.separator + packageName; } public String modelFileFolder() { - return outputFolder + File.separator + invokerPackage; + return outputFolder + File.separator + packageName; } @Override @@ -246,4 +269,12 @@ public class GoClientCodegen extends DefaultCodegen implements CodegenConfig { && !languageSpecificPrimitives.contains(type); } + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public void setPackageVersion(String packageVersion) { + this.packageVersion = packageVersion; + } + } diff --git a/modules/swagger-codegen/src/main/resources/go/README.mustache b/modules/swagger-codegen/src/main/resources/go/README.mustache new file mode 100644 index 000000000000..586b35ed3f5a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/go/README.mustache @@ -0,0 +1,12 @@ +# Go API client for {{packageName}} + +## Overview +This API client 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-spec) from a remote server, you can easily generate an API client. + + +## Installation +Put the package under your project folder and add the following in import: +``` + "./{{packageName}}" +``` + diff --git a/modules/swagger-codegen/src/main/resources/go/api.mustache b/modules/swagger-codegen/src/main/resources/go/api.mustache index d009ad10ef28..ae7fb8412b0c 100644 --- a/modules/swagger-codegen/src/main/resources/go/api.mustache +++ b/modules/swagger-codegen/src/main/resources/go/api.mustache @@ -1,11 +1,9 @@ -package {{invokerPackage}} +package {{packageName}} {{#operations}} import ( -// "encoding/json" "strings" "fmt" -// "log" "github.com/dghubble/sling" {{#imports}} "{{import}}" {{/imports}} @@ -13,8 +11,6 @@ import ( type {{classname}} struct { basePath string - apiClient ApiClient - //sling *sling.Sling } func New{{classname}}() *{{classname}}{ diff --git a/modules/swagger-codegen/src/main/resources/go/model.mustache b/modules/swagger-codegen/src/main/resources/go/model.mustache index bbd7e772d0e7..83ba416883d1 100644 --- a/modules/swagger-codegen/src/main/resources/go/model.mustache +++ b/modules/swagger-codegen/src/main/resources/go/model.mustache @@ -1,4 +1,4 @@ -package {{invokerPackage}} +package {{packageName}} {{#models}} import ( diff --git a/samples/client/petstore/go/swagger/ApiClient.go b/samples/client/petstore/go/swagger/ApiClient.go deleted file mode 100644 index 420a7df21ed8..000000000000 --- a/samples/client/petstore/go/swagger/ApiClient.go +++ /dev/null @@ -1,33 +0,0 @@ -package swagger - -import ( -// "encoding/json" - "os" -// "fmt" - "log" -// "net/url" -// napping "github.com/jmcvetta/napping" -) - -type ApiClient struct { - basePath string - logger *log.Logger -} - -func NewApiClient() *ApiClient { - return &ApiClient { - basePath: "http://petstore.swagger.io/v2", - logger: log.New(os.Stderr, "", log.LstdFlags)} -} - -func NewApiClientWithBasePath(basePath string) *ApiClient { - return &ApiClient { - basePath: basePath, - logger: log.New(os.Stderr, "", log.LstdFlags)} -} - - -func (a *ApiClient) CallApi(basePath string, path string, httpMethod string, queryParams map[string]string, headerParams map[string]string, formParams map[string]string, fileParams map[string]string, bodyParams map[string]string, contentType []string) { - a.logger.Printf("Requesting %v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n", basePath, path, httpMethod, queryParams, headerParams, formParams, fileParams, bodyParams, contentType) - -} diff --git a/samples/client/petstore/go/swagger/PetApi.go b/samples/client/petstore/go/swagger/PetApi.go index a4ed5033d570..51b32061e0fe 100644 --- a/samples/client/petstore/go/swagger/PetApi.go +++ b/samples/client/petstore/go/swagger/PetApi.go @@ -1,18 +1,14 @@ package swagger import ( -// "encoding/json" "strings" "fmt" -// "log" "github.com/dghubble/sling" "os" ) type PetApi struct { basePath string - apiClient ApiClient - //sling *sling.Sling } func NewPetApi() *PetApi{ @@ -264,6 +260,35 @@ func (a PetApi) DeletePet (PetId int64, ApiKey string) (error) { //fmt.Println("DeletePet response: void, ", resp, err) return err } +/** + * downloads an image + * + * @return *os.File + */ +//func (a PetApi) DownloadFile () (*os.File, error) { +func (a PetApi) DownloadFile () (*os.File, error) { + + _sling := sling.New().Get(a.basePath) + + // create path and map variables + path := "/v2/pet/{petId}/downloadImage" + + _sling = _sling.Path(path) + + // accept header + accepts := []string { "application/octet-stream" } + for key := range accepts { + _sling = _sling.Set("Accept", accepts[key]) + break // only use the first Accept + } + + + + response := new(*os.File) + _, err := _sling.ReceiveSuccess(response) + //fmt.Println("DownloadFile response: ", response, resp, err) + return *response, err +} /** * uploads an image * diff --git a/samples/client/petstore/go/swagger/StoreApi.go b/samples/client/petstore/go/swagger/StoreApi.go index 4af27d02b7ab..c43d320077c9 100644 --- a/samples/client/petstore/go/swagger/StoreApi.go +++ b/samples/client/petstore/go/swagger/StoreApi.go @@ -1,17 +1,13 @@ package swagger import ( -// "encoding/json" "strings" "fmt" -// "log" "github.com/dghubble/sling" ) type StoreApi struct { basePath string - apiClient ApiClient - //sling *sling.Sling } func NewStoreApi() *StoreApi{ diff --git a/samples/client/petstore/go/swagger/UserApi.go b/samples/client/petstore/go/swagger/UserApi.go index c5da3c81b6d9..9907453bd392 100644 --- a/samples/client/petstore/go/swagger/UserApi.go +++ b/samples/client/petstore/go/swagger/UserApi.go @@ -1,17 +1,13 @@ package swagger import ( -// "encoding/json" "strings" "fmt" -// "log" "github.com/dghubble/sling" ) type UserApi struct { basePath string - apiClient ApiClient - //sling *sling.Sling } func NewUserApi() *UserApi{ From 59b91c2120477eb288ed6c25234ad00797a408eb Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 11 Jan 2016 21:18:28 +0100 Subject: [PATCH 07/76] [android-volley] improved RequestQueue configuration and decoupled ApiInvoker from Android Context --- .../libraries/volley/apiInvoker.mustache | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index 04e6fdbc05c0..d3dd8877aa34 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -1,10 +1,14 @@ package {{invokerPackage}}; -import android.content.Context; - +import com.android.volley.Cache; +import com.android.volley.Network; import com.android.volley.RequestQueue; import com.android.volley.Response; -import com.android.volley.toolbox.Volley; +import com.android.volley.ResponseDelivery; +import com.android.volley.toolbox.BasicNetwork; +import com.android.volley.toolbox.HttpStack; +import com.android.volley.toolbox.HurlStack; +import com.android.volley.toolbox.NoCache; import com.google.gson.JsonParseException; import org.apache.http.Consts; @@ -36,7 +40,6 @@ public class ApiInvoker { private static ApiInvoker INSTANCE; private Map defaultHeaderMap = new HashMap(); - private Context context; private RequestQueue mRequestQueue; private Map authentications; @@ -165,8 +168,16 @@ public class ApiInvoker { return params; } - public static void initializeInstance(Context context) { - INSTANCE = new ApiInvoker(context); + public static void initializeInstance() { + initializeInstance(null, null, 0, null); + } + + public static void initializeInstance(Cache cache) { + initializeInstance(cache, null, 0, null); + } + + public static void initializeInstance(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + INSTANCE = new ApiInvoker(cache, network, threadPoolSize, delivery); setUserAgent("Android-Volley-Swagger"); // Setup authentications (key: authentication name, value: authentication). @@ -182,13 +193,19 @@ public class ApiInvoker { // Prevent the authentications from being modified. INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); } - private ApiInvoker(Context context) { - this.context = context; - initConnectionManager(); - } - public ApiInvoker() { - initConnectionManager(); + private ApiInvoker(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + if(cache == null) cache = new NoCache(); + if(network == null) { + HttpStack stack = new HurlStack(); + network = new BasicNetwork(stack); + } + + if(delivery == null) { + initConnectionRequest(cache, network); + } else { + initConnectionRequest(cache, network, threadPoolSize, delivery); + } } public static ApiInvoker getInstance() { @@ -433,7 +450,17 @@ public class ApiInvoker { } } - private void initConnectionManager() { - mRequestQueue = Volley.newRequestQueue(context); + private void initConnectionRequest(Cache cache, Network network) { + mRequestQueue = new RequestQueue(cache, network); + mRequestQueue.start(); + } + + private void initConnectionRequest(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + mRequestQueue = new RequestQueue(cache, network, threadPoolSize, delivery); + mRequestQueue.start(); + } + + public void stopQueue() { + mRequestQueue.stop(); } } From d40bb8ad3266b63966f2b77759eab582019e1dd9 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 11 Jan 2016 23:18:18 +0100 Subject: [PATCH 08/76] [android-volley] Added synchronous request support --- .../android/libraries/volley/api.mustache | 92 ++++++++++++++++++- .../libraries/volley/apiInvoker.mustache | 36 ++++++-- 2 files changed, 113 insertions(+), 15 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache index 1d70000c1dc1..be1074f40377 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache @@ -17,9 +17,12 @@ import com.android.volley.VolleyError; import org.apache.http.HttpEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; -import java.util.Map; +import java.util.ArrayList; import java.util.HashMap; -import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; {{#operations}} public class {{classname}} { @@ -44,11 +47,90 @@ public class {{classname}} { {{#operation}} /** - * {{summary}} - * {{notes}} + * {{summary}} + * {{notes}} {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} - */ + */ + public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) throws TimeoutException, ExecutionException, InterruptedException, ApiException { + Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; + {{#allParams}}{{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) { + VolleyError error = new VolleyError("Missing the required parameter '{{paramName}}' when calling {{nickname}}", + new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}")); + } + {{/required}}{{/allParams}} + + // create path and map variables + String path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{baseName}}" + "\\}", apiInvoker.escapeString({{{paramName}}}.toString())){{/pathParams}}; + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + {{#queryParams}} + queryParams.addAll(ApiInvoker.parameterToPairs("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}})); + {{/queryParams}} + + {{#headerParams}} + headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}})); + {{/headerParams}} + + String[] contentTypes = { + {{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}} + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + {{#formParams}}{{#notFile}} + if ({{paramName}} != null) { + builder.addTextBody("{{baseName}}", ApiInvoker.parameterToString({{paramName}}), ApiInvoker.TEXT_PLAIN_UTF8); + } + {{/notFile}}{{#isFile}} + if ({{paramName}} != null) { + builder.addBinaryBody("{{baseName}}", {{paramName}}); + } + {{/isFile}}{{/formParams}} + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + {{#formParams}}{{#notFile}}formParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));{{/notFile}} + {{/formParams}} + } + + String[] authNames = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} }; + + try { + String response = apiInvoker.invokeAPI (basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType, authNames); + if(response != null){ + return {{#returnType}}({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class){{/returnType}}; + } else { + return {{#returnType}}null{{/returnType}}; + } + } catch (ApiException ex) { + throw ex; + } catch (InterruptedException ex) { + throw ex; + } catch (ExecutionException ex) { + throw ex; + } catch (TimeoutException ex) { + throw ex; + } + } + + /** + * {{summary}} + * {{notes}} +{{#allParams}} * @param {{paramName}} {{description}}{{/allParams}} + */ public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}, {{/hasMore}}{{/allParams}}final Response.Listener<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}String{{/returnType}}> responseListener, final Response.ErrorListener errorListener) { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index d3dd8877aa34..1f3b899d2489 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -2,6 +2,7 @@ package {{invokerPackage}}; import com.android.volley.Cache; import com.android.volley.Network; +import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.ResponseDelivery; @@ -9,6 +10,7 @@ import com.android.volley.toolbox.BasicNetwork; import com.android.volley.toolbox.HttpStack; import com.android.volley.toolbox.HurlStack; import com.android.volley.toolbox.NoCache; +import com.android.volley.toolbox.RequestFuture; import com.google.gson.JsonParseException; import org.apache.http.Consts; @@ -26,6 +28,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TimeZone; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.ApiKeyAuth; @@ -334,7 +339,21 @@ public class ApiInvoker { } } + public String invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames) throws ApiException, InterruptedException, ExecutionException, TimeoutException { + RequestFuture future = RequestFuture.newFuture(); + Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, future, future); + if(request != null) { + mRequestQueue.add(request); + return future.get(30, TimeUnit.SECONDS); + } else return "no data"; + } + public void invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { + Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, stringRequest, errorListener); + if (request != null) mRequestQueue.add(request); + } + + public Request createRequest(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { StringBuilder b = new StringBuilder(); b.append("?"); @@ -391,13 +410,13 @@ public class ApiInvoker { } formParamStr = formParamBuilder.toString(); } + Request request = null; if ("GET".equals(method)) { - GetRequest request = new GetRequest(url, headers, null, stringRequest, errorListener); - mRequestQueue.add(request); + request = new GetRequest(url, headers, null, stringRequest, errorListener); } else if ("POST".equals(method)) { - PostRequest request = null; + request = null; if (formParamStr != null) { request = new PostRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -407,10 +426,9 @@ public class ApiInvoker { request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } else if ("PUT".equals(method)) { - PutRequest request = null; + request = null; if (formParamStr != null) { request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -420,10 +438,9 @@ public class ApiInvoker { request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } else if ("DELETE".equals(method)) { - DeleteRequest request = null; + request = null; if (formParamStr != null) { request = new DeleteRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -433,10 +450,9 @@ public class ApiInvoker { request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } else if ("PATCH".equals(method)) { - PatchRequest request = null; + request = null; if (formParamStr != null) { request = new PatchRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -446,8 +462,8 @@ public class ApiInvoker { request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } + return request; } private void initConnectionRequest(Cache cache, Network network) { From 584ea2862c3b56c5e242191478efc8e91989d20a Mon Sep 17 00:00:00 2001 From: John Hancock Date: Tue, 12 Jan 2016 21:26:49 -0500 Subject: [PATCH 09/76] CSharp: Optionally build csproj file --- .../io/swagger/codegen/CodegenConstants.java | 6 +++ .../languages/CSharpClientCodegen.java | 31 ++++++++++-- .../main/resources/csharp/Project.mustache | 47 +++++++++++++++++++ .../csharp/CSharpClientOptionsTest.java | 4 ++ .../options/CSharpClientOptionsProvider.java | 3 ++ 5 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/csharp/Project.mustache 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 4a4f9e037ef2..e2d3993fc444 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 @@ -62,4 +62,10 @@ public class CodegenConstants { public static final String OPTIONAL_ASSEMBLY_INFO = "optionalAssemblyInfo"; public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs (Default: true)."; + public static final String OPTIONAL_PROJECT_FILE = "optionalProjectFile"; + public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate {PackageName}.csproj (Default: true)."; + + public static final String OPTIONAL_PROJECT_GUID = "packageGuid"; + public static final String OPTIONAL_PROJECT_GUID_DESC = "The GUID that will be associated with the C# project"; + } 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 23c266e618fc..3a5423d69d85 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 @@ -24,8 +24,10 @@ import org.slf4j.LoggerFactory; public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); protected boolean optionalAssemblyInfoFlag = true; + protected boolean optionalProjectFileFlag = true; protected boolean optionalMethodArgumentFlag = true; protected boolean useDateTimeOffsetFlag = false; + protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; protected String packageTitle = "Swagger Library"; protected String packageProductName = "SwaggerLibrary"; protected String packageDescription = "A library generated from a Swagger doc"; @@ -119,6 +121,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString())); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder)); cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC)); + cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_PROJECT_FILE, + CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.TRUE.toString())); + cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, CodegenConstants.OPTIONAL_PROJECT_GUID_DESC) + .defaultValue(this.packageGuid)); } @Override @@ -163,7 +169,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig additionalProperties.put("packageDescription", packageDescription); additionalProperties.put("packageCompany", packageCompany); additionalProperties.put("packageCopyright", packageCopyright); - + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) + { + setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); + } + additionalProperties.put("packageGuid", packageGuid); + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)) { setOptionalMethodArgumentFlag(Boolean.valueOf(additionalProperties .get(CodegenConstants.OPTIONAL_METHOD_ARGUMENT).toString())); @@ -183,6 +195,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiException.cs")); supportingFiles.add(new SupportingFile("ApiResponse.mustache", sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiResponse.cs")); + supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); @@ -190,10 +203,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("packages.config.mustache", "vendor" + java.io.File.separator, "packages.config")); supportingFiles.add(new SupportingFile("README.md", "", "README.md")); + String packageFolder = sourceFolder + File.separator + packageName.replace(".", java.io.File.separator); if (optionalAssemblyInfoFlag) { - supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", "src" + File.separator + "Properties", "AssemblyInfo.cs")); + supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", packageFolder + File.separator + "Properties", "AssemblyInfo.cs")); + } + if (optionalProjectFileFlag) { + supportingFiles.add(new SupportingFile("Project.mustache", packageFolder, clientPackage + ".csproj")); } - } @Override @@ -338,6 +354,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig this.optionalAssemblyInfoFlag = flag; } + public void setOptionalProjectFileFlag(boolean flag) { + this.optionalProjectFileFlag = flag; + } + public void setOptionalMethodArgumentFlag(boolean flag) { this.optionalMethodArgumentFlag = flag; } @@ -350,7 +370,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("datetime", "DateTime?"); } - + public void setPackageGuid(String packageGuid) { + this.packageGuid = packageGuid; + } + public void setPackageName(String packageName) { this.packageName = packageName; } diff --git a/modules/swagger-codegen/src/main/resources/csharp/Project.mustache b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache new file mode 100644 index 000000000000..0e521341490a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache @@ -0,0 +1,47 @@ + + + + Debug + AnyCPU + {{packageGuid}} + Library + Properties + {{packageTitle}} + {{packageTitle}} + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java index 367977e2b052..7b1695f911fd 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -37,6 +37,10 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest { times = 1; clientCodegen.useDateTimeOffset(true); times = 1; + clientCodegen.setOptionalProjectFileFlag(true); + times = 1; + clientCodegen.setPackageGuid(CSharpClientOptionsProvider.PACKAGE_GUID_VALUE); + times = 1; }}; } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java index 0c2da1f3fa2a..eb187848aa61 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java @@ -10,6 +10,7 @@ public class CSharpClientOptionsProvider implements OptionsProvider { public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp"; public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String SOURCE_FOLDER_VALUE = "src_csharp"; + public static final String PACKAGE_GUID_VALUE = "{894EAEBB-649A-498C-A735-10D0BD7B73E0}"; @Override public String getLanguage() { @@ -26,6 +27,8 @@ public class CSharpClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true") .put(CodegenConstants.USE_DATETIME_OFFSET, "true") .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .put(CodegenConstants.OPTIONAL_PROJECT_FILE, "true") + .put(CodegenConstants.OPTIONAL_PROJECT_GUID, PACKAGE_GUID_VALUE) .build(); } From 319c2606783687419180ed3361b0acd78a3e779a Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 15 Jan 2016 19:32:23 +0800 Subject: [PATCH 10/76] Java okhttp-gson: support binary (byte array) for body parameter and response. Also Update Java default, jersey2 and okhttp-gson clients to support (constant) query string in the `path` (to work with the 2 "fake" petstore endpoints on binary). --- .../main/resources/Java/ApiClient.mustache | 59 +++-- .../Java/libraries/jersey2/ApiClient.mustache | 4 +- .../libraries/okhttp-gson/ApiClient.mustache | 74 +++++-- .../java/io/swagger/client/ApiClient.java | 61 ++++-- .../java/io/swagger/client/api/PetApi.java | 89 +++++++- .../io/swagger/client/model/Category.java | 12 +- .../java/io/swagger/client/model/Order.java | 12 +- .../java/io/swagger/client/model/Pet.java | 12 +- .../java/io/swagger/client/model/Tag.java | 12 +- .../java/io/swagger/client/model/User.java | 12 +- .../io/swagger/petstore/test/PetApiTest.java | 54 ++++- .../java/io/swagger/client/ApiClient.java | 6 +- .../java/io/swagger/client/api/PetApi.java | 89 +++++++- .../io/swagger/client/model/Category.java | 12 +- .../java/io/swagger/client/model/Order.java | 12 +- .../java/io/swagger/client/model/Pet.java | 12 +- .../java/io/swagger/client/model/Tag.java | 12 +- .../java/io/swagger/client/model/User.java | 12 +- .../io/swagger/petstore/test/PetApiTest.java | 34 +++ .../java/io/swagger/client/ApiClient.java | 74 +++++-- .../java/io/swagger/client/api/PetApi.java | 206 ++++++++++++++++++ .../io/swagger/petstore/test/PetApiTest.java | 28 +++ 22 files changed, 751 insertions(+), 147 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache index 9f55d5a14d45..0ac7e31d387a 100644 --- a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache @@ -452,34 +452,51 @@ public class ApiClient { } } - private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + /** + * Build full URL by concatenating base path, the given sub path and query parameters. + * + * @param path The sub path + * @param queryParams The query parameters + * @return The full URL + */ + private String buildUrl(String path, List queryParams) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); - if (body != null && !formParams.isEmpty()){ + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; + for (Pair param : queryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); + } + } + } + + return url.toString(); + } + + private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + if (body != null && !formParams.isEmpty()) { throw new ApiException(500, "Cannot have body and form params"); } updateParamsForAuth(authNames, queryParams, headerParams); - StringBuilder b = new StringBuilder(); - b.append("?"); - if (queryParams != null){ - for (Pair queryParam : queryParams){ - if (!queryParam.getName().isEmpty()) { - b.append(escapeString(queryParam.getName())); - b.append("="); - b.append(escapeString(queryParam.getValue())); - b.append("&"); - } - } - } - - String querystring = b.substring(0, b.length() - 1); - + final String url = buildUrl(path, queryParams); Builder builder; - if (accept == null) - builder = httpClient.resource(basePath + path + querystring).getRequestBuilder(); - else - builder = httpClient.resource(basePath + path + querystring).accept(accept); + if (accept == null) { + builder = httpClient.resource(url).getRequestBuilder(); + } else { + builder = httpClient.resource(url).accept(accept); + } for (String key : headerParams.keySet()) { builder = builder.header(key, headerParams.get(key)); diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache index 83e92921a827..ec3c7a7f7c56 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache @@ -495,7 +495,9 @@ public class ApiClient { public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { updateParamsForAuth(authNames, queryParams, headerParams); - WebTarget target = httpClient.target(this.basePath).path(path); + // Not using `.target(this.basePath).path(path)` below, + // to support (constant) query string in `path`, e.g. "/posts?draft=1" + WebTarget target = httpClient.target(this.basePath + path); if (queryParams != null) { for (Pair queryParam : queryParams) { diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache index 651a77ca23be..34b0e4b33b23 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache @@ -657,8 +657,8 @@ public class ApiClient { } /** - * Deserialize response body to Java object, according to the Content-Type - * response header. + * Deserialize response body to Java object, according to the return type and + * the Content-Type response header. * * @param response HTTP response * @param returnType The type of the Java object @@ -667,12 +667,21 @@ public class ApiClient { * or the Content-Type of the response is not supported. */ public T deserialize(Response response, Type returnType) throws ApiException { - if (response == null || returnType == null) + if (response == null || returnType == null) { return null; + } - // Handle file downloading. - if (returnType.equals(File.class)) + if ("byte[]".equals(returnType.toString())) { + // Handle binary response (byte array). + try { + return (T) response.body().bytes(); + } catch (IOException e) { + throw new ApiException(e); + } + } else if (returnType.equals(File.class)) { + // Handle file downloading. return (T) downloadFileFromResponse(response); + } String respBody; try { @@ -684,8 +693,9 @@ public class ApiClient { throw new ApiException(e); } - if (respBody == null || "".equals(respBody)) + if (respBody == null || "".equals(respBody)) { return null; + } String contentType = response.headers().get("Content-Type"); if (contentType == null) { @@ -707,20 +717,29 @@ public class ApiClient { } /** - * Serialize the given Java object into request body string, according to the - * request Content-Type. + * Serialize the given Java object into request body according to the object's + * class and the request Content-Type. * * @param obj The Java object * @param contentType The request Content-Type - * @return The serialized string + * @return The serialized request body * @throws ApiException If fail to serialize the given object */ - public String serialize(Object obj, String contentType) throws ApiException { - if (isJsonMime(contentType)) { - if (obj != null) - return json.serialize(obj); - else - return null; + public RequestBody serialize(Object obj, String contentType) throws ApiException { + if (obj instanceof byte[]) { + // Binary (byte array) body parameter support. + return RequestBody.create(MediaType.parse(contentType), (byte[]) obj); + } else if (obj instanceof File) { + // File body parameter support. + return RequestBody.create(MediaType.parse(contentType), (File) obj); + } else if (isJsonMime(contentType)) { + String content; + if (obj != null) { + content = json.serialize(obj); + } else { + content = null; + } + return RequestBody.create(MediaType.parse(contentType), content); } else { throw new ApiException("Content type \"" + contentType + "\" is not supported"); } @@ -909,7 +928,7 @@ public class ApiClient { reqBody = RequestBody.create(MediaType.parse(contentType), ""); } } else { - reqBody = RequestBody.create(MediaType.parse(contentType), serialize(body, contentType)); + reqBody = serialize(body, contentType); } Request request = null; @@ -932,20 +951,27 @@ public class ApiClient { * @return The full URL */ public String buildUrl(String path, List queryParams) { - StringBuilder query = new StringBuilder(); - if (queryParams != null) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); + + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; for (Pair param : queryParams) { if (param.getValue() != null) { - if (query.toString().length() == 0) - query.append("?"); - else - query.append("&"); + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } String value = parameterToString(param.getValue()); - query.append(escapeString(param.getName())).append("=").append(escapeString(value)); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); } } } - return basePath + path + query.toString(); + + return url.toString(); } /** 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 581eafa51ca4..da80705902c5 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 @@ -41,7 +41,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 = "2016-01-08T18:50:38.131+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -451,34 +451,51 @@ public class ApiClient { } } - private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + /** + * Build full URL by concatenating base path, the given sub path and query parameters. + * + * @param path The sub path + * @param queryParams The query parameters + * @return The full URL + */ + private String buildUrl(String path, List queryParams) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); - if (body != null && !formParams.isEmpty()){ + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; + for (Pair param : queryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); + } + } + } + + return url.toString(); + } + + private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + if (body != null && !formParams.isEmpty()) { throw new ApiException(500, "Cannot have body and form params"); } updateParamsForAuth(authNames, queryParams, headerParams); - StringBuilder b = new StringBuilder(); - b.append("?"); - if (queryParams != null){ - for (Pair queryParam : queryParams){ - if (!queryParam.getName().isEmpty()) { - b.append(escapeString(queryParam.getName())); - b.append("="); - b.append(escapeString(queryParam.getValue())); - b.append("&"); - } - } - } - - String querystring = b.substring(0, b.length() - 1); - + final String url = buildUrl(path, queryParams); Builder builder; - if (accept == null) - builder = httpClient.resource(basePath + path + querystring).getRequestBuilder(); - else - builder = httpClient.resource(basePath + path + querystring).accept(accept); + if (accept == null) { + builder = httpClient.resource(url).getRequestBuilder(); + } else { + builder = httpClient.resource(url).accept(accept); + } for (String key : headerParams.keySet()) { builder = builder.header(key, headerParams.get(key)); 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 1ae3b1dc44dd..bbbc5503c92f 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 @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class PetApi { private ApiClient apiClient; @@ -395,6 +395,93 @@ public class PetApi { String[] authNames = new String[] { "petstore_auth" }; + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); + + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + */ + public byte[] getPetByIdWithByteArray(Long petId) throws ApiException { + Object postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"); + } + + // create path and map variables + String path = "/pet/{petId}?testing_byte_array=true".replaceAll("\\{format\\}","json") + .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "api_key" }; + + + GenericType returnType = new GenericType() {}; + return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return void + */ + public void addPetUsingByteArray(byte[] body) throws ApiException { + Object postBody = body; + + // create path and map variables + String path = "/pet?testing_byte_array=true".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + "application/json", "application/xml" + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "petstore_auth" }; + + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); } 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 1faa3f275892..4dcaa928c9a3 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 @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Category { private Long id = null; @@ -45,7 +45,7 @@ public class Category { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Category { return false; } Category category = (Category) o; - return Objects.equals(id, category.id) && - Objects.equals(name, category.name); + + return true && Objects.equals(id, category.id) && + Objects.equals(name, category.name) + ; } @Override @@ -77,7 +79,7 @@ public class Category { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 ec66ccbd7772..67543c5a227e 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 @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Order { private Long id = null; @@ -123,7 +123,7 @@ public class Order { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -131,12 +131,14 @@ public class Order { return false; } Order order = (Order) o; - return Objects.equals(id, order.id) && + + return true && Objects.equals(id, order.id) && Objects.equals(petId, order.petId) && Objects.equals(quantity, order.quantity) && Objects.equals(shipDate, order.shipDate) && Objects.equals(status, order.status) && - Objects.equals(complete, order.complete); + Objects.equals(complete, order.complete) + ; } @Override @@ -163,7 +165,7 @@ public class Order { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 2d773d9f5bdd..12d3e5a441f4 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 @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Pet { private Long id = null; @@ -125,7 +125,7 @@ public class Pet { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -133,12 +133,14 @@ public class Pet { return false; } Pet pet = (Pet) o; - return Objects.equals(id, pet.id) && + + return true && Objects.equals(id, pet.id) && Objects.equals(category, pet.category) && Objects.equals(name, pet.name) && Objects.equals(photoUrls, pet.photoUrls) && Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status); + Objects.equals(status, pet.status) + ; } @Override @@ -165,7 +167,7 @@ public class Pet { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 c1156c9f4c0b..7f65d9c963a2 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 @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Tag { private Long id = null; @@ -45,7 +45,7 @@ public class Tag { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Tag { return false; } Tag tag = (Tag) o; - return Objects.equals(id, tag.id) && - Objects.equals(name, tag.name); + + return true && Objects.equals(id, tag.id) && + Objects.equals(name, tag.name) + ; } @Override @@ -77,7 +79,7 @@ public class Tag { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 7c07662debe4..df6bc1e543f1 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 @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class User { private Long id = null; @@ -130,7 +130,7 @@ public class User { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -138,14 +138,16 @@ public class User { return false; } User user = (User) o; - return Objects.equals(id, user.id) && + + return true && Objects.equals(id, user.id) && Objects.equals(username, user.username) && Objects.equals(firstName, user.firstName) && Objects.equals(lastName, user.lastName) && Objects.equals(email, user.email) && Objects.equals(password, user.password) && Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus); + Objects.equals(userStatus, user.userStatus) + ; } @Override @@ -174,7 +176,7 @@ public class User { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java index c0bee9328d5b..00ec57ab7743 100644 --- a/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,5 +1,9 @@ package io.swagger.petstore.test; +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.datatype.joda.*; + import io.swagger.client.ApiClient; import io.swagger.client.ApiException; import io.swagger.client.Configuration; @@ -19,7 +23,8 @@ import org.junit.*; import static org.junit.Assert.*; public class PetApiTest { - PetApi api = null; + private PetApi api; + private ObjectMapper mapper; @Before public void setup() { @@ -68,6 +73,20 @@ public class PetApiTest { assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); } + @Test + public void testCreateAndGetPetWithByteArray() throws Exception { + Pet pet = createRandomPet(); + byte[] bytes = serializeJson(pet).getBytes(); + api.addPetUsingByteArray(bytes); + + byte[] fetchedBytes = api.getPetByIdWithByteArray(pet.getId()); + Pet fetched = deserializeJson(new String(fetchedBytes), Pet.class); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + @Test public void testUpdatePet() throws Exception { Pet pet = createRandomPet(); @@ -216,4 +235,37 @@ public class PetApiTest { return pet; } + + private String serializeJson(Object o) { + if (mapper == null) { + mapper = createObjectMapper(); + } + try { + return mapper.writeValueAsString(o); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private T deserializeJson(String json, Class klass) { + if (mapper == null) { + mapper = createObjectMapper(); + } + try { + return mapper.readValue(json, klass); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private ObjectMapper createObjectMapper() { + ObjectMapper 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()); + return mapper; + } } 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 7f06e36633f1..c5b3f24e0a1c 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 = "2016-01-08T18:51:26.068+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -494,7 +494,9 @@ public class ApiClient { public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { updateParamsForAuth(authNames, queryParams, headerParams); - WebTarget target = httpClient.target(this.basePath).path(path); + // Not using `.target(this.basePath).path(path)` below, + // to support (constant) query string in `path`, e.g. "/posts?draft=1" + WebTarget target = httpClient.target(this.basePath + path); if (queryParams != null) { for (Pair queryParam : queryParams) { 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 09b7bdba247b..9155782024a6 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 @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class PetApi { private ApiClient apiClient; @@ -395,6 +395,93 @@ public class PetApi { String[] authNames = new String[] { "petstore_auth" }; + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); + + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + */ + public byte[] getPetByIdWithByteArray(Long petId) throws ApiException { + Object postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"); + } + + // create path and map variables + String path = "/pet/{petId}?testing_byte_array=true".replaceAll("\\{format\\}","json") + .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "api_key" }; + + + GenericType returnType = new GenericType() {}; + return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return void + */ + public void addPetUsingByteArray(byte[] body) throws ApiException { + Object postBody = body; + + // create path and map variables + String path = "/pet?testing_byte_array=true".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + "application/json", "application/xml" + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "petstore_auth" }; + + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); } 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 4a66bec68d3c..2235895ee8af 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 @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Category { private Long id = null; @@ -45,7 +45,7 @@ public class Category { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Category { return false; } Category category = (Category) o; - return Objects.equals(id, category.id) && - Objects.equals(name, category.name); + + return true && Objects.equals(id, category.id) && + Objects.equals(name, category.name) + ; } @Override @@ -77,7 +79,7 @@ public class Category { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 29d0a70616d6..0d9b89eb58fa 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 @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Order { private Long id = null; @@ -123,7 +123,7 @@ public class Order { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -131,12 +131,14 @@ public class Order { return false; } Order order = (Order) o; - return Objects.equals(id, order.id) && + + return true && Objects.equals(id, order.id) && Objects.equals(petId, order.petId) && Objects.equals(quantity, order.quantity) && Objects.equals(shipDate, order.shipDate) && Objects.equals(status, order.status) && - Objects.equals(complete, order.complete); + Objects.equals(complete, order.complete) + ; } @Override @@ -163,7 +165,7 @@ public class Order { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 8ded8bc4cb2e..9e5a2d97fb21 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 @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Pet { private Long id = null; @@ -125,7 +125,7 @@ public class Pet { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -133,12 +133,14 @@ public class Pet { return false; } Pet pet = (Pet) o; - return Objects.equals(id, pet.id) && + + return true && Objects.equals(id, pet.id) && Objects.equals(category, pet.category) && Objects.equals(name, pet.name) && Objects.equals(photoUrls, pet.photoUrls) && Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status); + Objects.equals(status, pet.status) + ; } @Override @@ -165,7 +167,7 @@ public class Pet { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 cbdca57888f0..4b2cc23bc230 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 @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Tag { private Long id = null; @@ -45,7 +45,7 @@ public class Tag { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Tag { return false; } Tag tag = (Tag) o; - return Objects.equals(id, tag.id) && - Objects.equals(name, tag.name); + + return true && Objects.equals(id, tag.id) && + Objects.equals(name, tag.name) + ; } @Override @@ -77,7 +79,7 @@ public class Tag { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "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 ae1dff618fc7..4f859759ce85 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 @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class User { private Long id = null; @@ -130,7 +130,7 @@ public class User { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -138,14 +138,16 @@ public class User { return false; } User user = (User) o; - return Objects.equals(id, user.id) && + + return true && Objects.equals(id, user.id) && Objects.equals(username, user.username) && Objects.equals(firstName, user.firstName) && Objects.equals(lastName, user.lastName) && Objects.equals(email, user.email) && Objects.equals(password, user.password) && Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus); + Objects.equals(userStatus, user.userStatus) + ; } @Override @@ -174,7 +176,7 @@ public class User { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java index c0bee9328d5b..91fb92fbf01c 100644 --- a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,5 +1,7 @@ package io.swagger.petstore.test; +import com.fasterxml.jackson.databind.ObjectMapper; + import io.swagger.client.ApiClient; import io.swagger.client.ApiException; import io.swagger.client.Configuration; @@ -68,6 +70,20 @@ public class PetApiTest { assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); } + @Test + public void testCreateAndGetPetWithByteArray() throws Exception { + Pet pet = createRandomPet(); + byte[] bytes = serializeJson(pet, api.getApiClient()).getBytes(); + api.addPetUsingByteArray(bytes); + + byte[] fetchedBytes = api.getPetByIdWithByteArray(pet.getId()); + Pet fetched = deserializeJson(new String(fetchedBytes), Pet.class, api.getApiClient()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + @Test public void testUpdatePet() throws Exception { Pet pet = createRandomPet(); @@ -216,4 +232,22 @@ public class PetApiTest { return pet; } + + private String serializeJson(Object o, ApiClient apiClient) { + ObjectMapper mapper = apiClient.getJSON().getContext(null); + try { + return mapper.writeValueAsString(o); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private T deserializeJson(String json, Class klass, ApiClient apiClient) { + ObjectMapper mapper = apiClient.getJSON().getContext(null); + try { + return mapper.readValue(json, klass); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java index e8933b9373af..810922b90a27 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java @@ -656,8 +656,8 @@ public class ApiClient { } /** - * Deserialize response body to Java object, according to the Content-Type - * response header. + * Deserialize response body to Java object, according to the return type and + * the Content-Type response header. * * @param response HTTP response * @param returnType The type of the Java object @@ -666,12 +666,21 @@ public class ApiClient { * or the Content-Type of the response is not supported. */ public T deserialize(Response response, Type returnType) throws ApiException { - if (response == null || returnType == null) + if (response == null || returnType == null) { return null; + } - // Handle file downloading. - if (returnType.equals(File.class)) + if ("byte[]".equals(returnType.toString())) { + // Handle binary response (byte array). + try { + return (T) response.body().bytes(); + } catch (IOException e) { + throw new ApiException(e); + } + } else if (returnType.equals(File.class)) { + // Handle file downloading. return (T) downloadFileFromResponse(response); + } String respBody; try { @@ -683,8 +692,9 @@ public class ApiClient { throw new ApiException(e); } - if (respBody == null || "".equals(respBody)) + if (respBody == null || "".equals(respBody)) { return null; + } String contentType = response.headers().get("Content-Type"); if (contentType == null) { @@ -706,20 +716,29 @@ public class ApiClient { } /** - * Serialize the given Java object into request body string, according to the - * request Content-Type. + * Serialize the given Java object into request body according to the object's + * class and the request Content-Type. * * @param obj The Java object * @param contentType The request Content-Type - * @return The serialized string + * @return The serialized request body * @throws ApiException If fail to serialize the given object */ - public String serialize(Object obj, String contentType) throws ApiException { - if (isJsonMime(contentType)) { - if (obj != null) - return json.serialize(obj); - else - return null; + public RequestBody serialize(Object obj, String contentType) throws ApiException { + if (obj instanceof byte[]) { + // Binary (byte array) body parameter support. + return RequestBody.create(MediaType.parse(contentType), (byte[]) obj); + } else if (obj instanceof File) { + // File body parameter support. + return RequestBody.create(MediaType.parse(contentType), (File) obj); + } else if (isJsonMime(contentType)) { + String content; + if (obj != null) { + content = json.serialize(obj); + } else { + content = null; + } + return RequestBody.create(MediaType.parse(contentType), content); } else { throw new ApiException("Content type \"" + contentType + "\" is not supported"); } @@ -908,7 +927,7 @@ public class ApiClient { reqBody = RequestBody.create(MediaType.parse(contentType), ""); } } else { - reqBody = RequestBody.create(MediaType.parse(contentType), serialize(body, contentType)); + reqBody = serialize(body, contentType); } Request request = null; @@ -931,20 +950,27 @@ public class ApiClient { * @return The full URL */ public String buildUrl(String path, List queryParams) { - StringBuilder query = new StringBuilder(); - if (queryParams != null) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); + + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; for (Pair param : queryParams) { if (param.getValue() != null) { - if (query.toString().length() == 0) - query.append("?"); - else - query.append("&"); + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } String value = parameterToString(param.getValue()); - query.append(escapeString(param.getName())).append("=").append(escapeString(value)); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); } } } - return basePath + path + query.toString(); + + return url.toString(); } /** 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 460cd0f4c4d6..497e3ade6a85 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 @@ -892,4 +892,210 @@ public class PetApi { return call; } + /* Build call for getPetByIdWithByteArray */ + private Call getPetByIdWithByteArrayCall(Long petId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException { + Object postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw new ApiException("Missing the required parameter 'petId' when calling getPetByIdWithByteArray(Async)"); + } + + + // create path and map variables + String path = "/pet/{petId}?testing_byte_array=true".replaceAll("\\{format\\}","json") + .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); + + List queryParams = new ArrayList(); + + Map headerParams = new HashMap(); + + Map formParams = new HashMap(); + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + if (accept != null) headerParams.put("Accept", accept); + + final String[] contentTypes = { + + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + headerParams.put("Content-Type", contentType); + + if(progressListener != null) { + apiClient.getHttpClient().networkInterceptors().add(new Interceptor() { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + Response originalResponse = chain.proceed(chain.request()); + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), progressListener)) + .build(); + } + }); + } + + String[] authNames = new String[] { "api_key" }; + return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public byte[] getPetByIdWithByteArray(Long petId) throws ApiException { + ApiResponse resp = getPetByIdWithByteArrayWithHttpInfo(petId); + return resp.getData(); + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return ApiResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public ApiResponse getPetByIdWithByteArrayWithHttpInfo(Long petId) throws ApiException { + Call call = getPetByIdWithByteArrayCall(petId, null, null); + Type returnType = new TypeToken(){}.getType(); + return apiClient.execute(call, returnType); + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' (asynchronously) + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @param callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + */ + public Call getPetByIdWithByteArrayAsync(Long petId, final ApiCallback callback) throws ApiException { + + ProgressResponseBody.ProgressListener progressListener = null; + ProgressRequestBody.ProgressRequestListener progressRequestListener = null; + + if (callback != null) { + progressListener = new ProgressResponseBody.ProgressListener() { + @Override + public void update(long bytesRead, long contentLength, boolean done) { + callback.onDownloadProgress(bytesRead, contentLength, done); + } + }; + + progressRequestListener = new ProgressRequestBody.ProgressRequestListener() { + @Override + public void onRequestProgress(long bytesWritten, long contentLength, boolean done) { + callback.onUploadProgress(bytesWritten, contentLength, done); + } + }; + } + + Call call = getPetByIdWithByteArrayCall(petId, progressListener, progressRequestListener); + Type returnType = new TypeToken(){}.getType(); + apiClient.executeAsync(call, returnType, callback); + return call; + } + + /* Build call for addPetUsingByteArray */ + private Call addPetUsingByteArrayCall(byte[] body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException { + Object postBody = body; + + + // create path and map variables + String path = "/pet?testing_byte_array=true".replaceAll("\\{format\\}","json"); + + List queryParams = new ArrayList(); + + Map headerParams = new HashMap(); + + Map formParams = new HashMap(); + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + if (accept != null) headerParams.put("Accept", accept); + + final String[] contentTypes = { + "application/json", "application/xml" + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + headerParams.put("Content-Type", contentType); + + if(progressListener != null) { + apiClient.getHttpClient().networkInterceptors().add(new Interceptor() { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + Response originalResponse = chain.proceed(chain.request()); + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), progressListener)) + .build(); + } + }); + } + + String[] authNames = new String[] { "petstore_auth" }; + return apiClient.buildCall(path, "POST", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public void addPetUsingByteArray(byte[] body) throws ApiException { + addPetUsingByteArrayWithHttpInfo(body); + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return ApiResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public ApiResponse addPetUsingByteArrayWithHttpInfo(byte[] body) throws ApiException { + Call call = addPetUsingByteArrayCall(body, null, null); + return apiClient.execute(call); + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store (asynchronously) + * + * @param body Pet object in the form of byte array + * @param callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + */ + public Call addPetUsingByteArrayAsync(byte[] body, final ApiCallback callback) throws ApiException { + + ProgressResponseBody.ProgressListener progressListener = null; + ProgressRequestBody.ProgressRequestListener progressRequestListener = null; + + if (callback != null) { + progressListener = new ProgressResponseBody.ProgressListener() { + @Override + public void update(long bytesRead, long contentLength, boolean done) { + callback.onDownloadProgress(bytesRead, contentLength, done); + } + }; + + progressRequestListener = new ProgressRequestBody.ProgressRequestListener() { + @Override + public void onRequestProgress(long bytesWritten, long contentLength, boolean done) { + callback.onUploadProgress(bytesWritten, contentLength, done); + } + }; + } + + Call call = addPetUsingByteArrayCall(body, progressListener, progressRequestListener); + apiClient.executeAsync(call, callback); + return call; + } + } diff --git a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java index 56cc80739848..6c79f2b61fba 100644 --- a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,5 +1,7 @@ package io.swagger.petstore.test; +import com.google.gson.reflect.TypeToken; + import io.swagger.client.*; import io.swagger.client.api.*; import io.swagger.client.auth.*; @@ -8,6 +10,7 @@ import io.swagger.client.model.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -67,6 +70,23 @@ public class PetApiTest { assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); } + @Test + public void testCreateAndGetPetWithByteArray() throws Exception { + Pet pet = createRandomPet(); + System.out.println(serializeJson(pet, api.getApiClient())); + byte[] bytes = serializeJson(pet, api.getApiClient()).getBytes(); + api.addPetUsingByteArray(bytes); + + byte[] fetchedBytes = api.getPetByIdWithByteArray(pet.getId()); + System.out.println(new String(fetchedBytes)); + Type type = new TypeToken(){}.getType(); + Pet fetched = deserializeJson(new String(fetchedBytes), type, api.getApiClient()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + @Test public void testCreateAndGetPetWithHttpInfo() throws Exception { Pet pet = createRandomPet(); @@ -325,4 +345,12 @@ public class PetApiTest { return pet; } + + private String serializeJson(Object o, ApiClient apiClient) { + return apiClient.getJSON().serialize(o); + } + + private T deserializeJson(String json, Type type, ApiClient apiClient) { + return (T) apiClient.getJSON().deserialize(json, type); + } } From faa4ecd0cd760acd48acb45cfd8050dfb56230b9 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Fri, 15 Jan 2016 12:39:25 +0100 Subject: [PATCH 11/76] Support java code generation for UUIDProperty A property defined as "type: string & format: uuid" is now generated in Java using "java.util.UUID" class instead of a classical String. In the Java, the UUID class do not provide a constructor. You may use the method UUID.fromString() to construct your UUID object. --- .../src/main/java/io/swagger/codegen/DefaultCodegen.java | 2 ++ 1 file changed, 2 insertions(+) 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 abc4d045315e..87201497025c 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 @@ -651,6 +651,8 @@ public class DefaultCodegen { datatype = "map"; } else if (p instanceof DecimalProperty) { datatype = "number"; + } else if ( p instanceof UUIDProperty) { + datatype = "UUID"; } else if (p instanceof RefProperty) { try { RefProperty r = (RefProperty) p; From 467939216c597fe147c10b6153e0cff0e1c7cbd8 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Fri, 15 Jan 2016 14:02:55 +0100 Subject: [PATCH 12/76] fix java warnings Do not impact any feature. Juste correct some Java warnings (static methods, unused imports or parameters...). --- .../io/swagger/codegen/SwaggerCodegen.java | 1 + .../java/io/swagger/codegen/cmd/Generate.java | 6 +- .../java/io/swagger/codegen/cmd/Meta.java | 6 +- .../io/swagger/codegen/cmd/GenerateTest.java | 1 + .../codegen/cmd/utils/OptionUtilsTest.java | 2 +- .../swagger/codegen/plugin/CodeGenMojo.java | 2 +- .../io/swagger/codegen/AbstractGenerator.java | 7 +-- .../io/swagger/codegen/ClientOptInput.java | 5 -- .../main/java/io/swagger/codegen/Codegen.java | 6 +- .../io/swagger/codegen/CodegenOperation.java | 2 +- .../io/swagger/codegen/CodegenProperty.java | 44 ++++++++++++++ .../io/swagger/codegen/DefaultCodegen.java | 57 +++++++++++++------ .../io/swagger/codegen/DefaultGenerator.java | 13 ++--- .../swagger/codegen/InlineModelResolver.java | 50 ++-------------- .../io/swagger/codegen/MetaGenerator.java | 13 +---- .../io/swagger/codegen/SupportingFile.java | 1 + .../io/swagger/codegen/auth/AuthParser.java | 2 +- .../codegen/examples/ExampleGenerator.java | 8 +-- .../codegen/examples/XmlExampleGenerator.java | 10 ++-- .../AbstractTypeScriptClientCodegen.java | 2 +- .../languages/AkkaScalaClientCodegen.java | 4 +- .../languages/AndroidClientCodegen.java | 3 +- .../languages/AsyncScalaClientCodegen.java | 2 - .../languages/CSharpClientCodegen.java | 3 +- .../languages/ClojureClientCodegen.java | 3 +- .../languages/CsharpDotNet2ClientCodegen.java | 2 +- .../codegen/languages/DartClientCodegen.java | 7 +-- .../codegen/languages/FlashClientCodegen.java | 22 ++----- .../languages/FlaskConnexionCodegen.java | 6 +- .../codegen/languages/JMeterCodegen.java | 2 - .../codegen/languages/JavaClientCodegen.java | 17 +++--- .../languages/JavaInflectorServerCodegen.java | 4 +- .../languages/JavascriptClientCodegen.java | 23 ++++---- .../codegen/languages/JaxRSServerCodegen.java | 6 +- .../languages/NodeJSServerCodegen.java | 4 +- .../codegen/languages/ObjcClientCodegen.java | 9 +-- .../codegen/languages/PerlClientCodegen.java | 6 +- .../codegen/languages/PhpClientCodegen.java | 9 +-- .../languages/PythonClientCodegen.java | 5 +- .../codegen/languages/RubyClientCodegen.java | 9 +-- .../codegen/languages/SilexServerCodegen.java | 2 +- .../languages/SinatraServerCodegen.java | 7 +-- .../languages/SlimFrameworkServerCodegen.java | 3 +- .../languages/SpringMVCServerCodegen.java | 2 +- .../codegen/languages/SwiftCodegen.java | 3 +- .../codegen/languages/TizenClientCodegen.java | 8 --- .../akkascala/AkkaScalaClientOptionsTest.java | 1 + .../android/AndroidClientOptionsTest.java | 1 + .../AsyncScalaClientOptionsTest.java | 1 + .../config/CodegenConfiguratorTest.java | 1 + .../csharp/CSharpClientOptionsTest.java | 1 + .../CsharpDotNet2ClientOptionsTest.java | 1 + .../codegen/dart/DartClientOptionsTest.java | 1 + .../codegen/flash/FlashClienOptionsTest.java | 1 + .../JavaInflectorServerOptionsTest.java | 1 + .../codegen/java/JavaClientOptionsTest.java | 1 + .../codegen/java/JavaInheritanceTest.java | 1 + .../codegen/java/JavaModelEnumTest.java | 1 + .../swagger/codegen/java/JavaModelTest.java | 1 + .../java/jaxrs/AllowableValuesTest.java | 2 +- .../codegen/jaxrs/JaxRSServerOptionsTest.java | 1 + .../codegen/jaxrs/JaxrsJava8ModelTest.java | 3 + .../codegen/jaxrs/JaxrsJodaModelTest.java | 2 + .../codegen/languages/BooleanOptionsTest.java | 1 + .../nodejs/NodeJSServerOptionsTest.java | 1 + .../codegen/objc/ObjcClientOptionsTest.java | 1 + .../swagger/codegen/objc/ObjcModelTest.java | 1 + .../SpringMVCServerOptionsProvider.java | 2 +- .../codegen/perl/PerlClientOptionsTest.java | 1 + .../codegen/php/PhpClientOptionsTest.java | 1 + .../io/swagger/codegen/php/PhpModelTest.java | 1 + .../python/PythonClientOptionsTest.java | 1 + .../io/swagger/codegen/python/PythonTest.java | 1 + .../codegen/qtfivecpp/Qt5CPPOptionsTest.java | 1 + .../codegen/ruby/RubyClientOptionsTest.java | 1 + .../codegen/scala/ScalaClientOptionsTest.java | 1 + .../swagger/codegen/scala/ScalaModelTest.java | 1 + .../scalatra/ScalatraServerOptionsTest.java | 1 + .../codegen/silex/SilexServerOptionsTest.java | 1 + .../sinatra/SinatraServerOptionsTest.java | 1 + .../slim/SlimFrameworkServerOptionsTest.java | 1 + .../springmvc/SpringMVCServerOptionsTest.java | 1 + .../staticDocs/StaticDocOptionsTest.java | 1 + .../staticDocs/StaticOperationTest.java | 1 + .../statichtml/StaticHtmlOptionsTest.java | 1 + .../codegen/swagger/SwaggerOptionsTest.java | 1 + .../swaggeryaml/SwaggerYamlOptionsTest.java | 1 + .../codegen/swift/SwiftOptionsTest.java | 1 + .../codegen/tizen/TizenClientOptionsTest.java | 1 + .../TypeScriptAngularClientOptionsTest.java | 1 + .../TypeScriptAngularModelTest.java | 1 + .../TypeScriptNodeClientOptionsTest.java | 1 + .../java/io/swagger/generator/Bootstrap.java | 3 - .../generator/exception/ApiException.java | 5 ++ .../exception/BadRequestException.java | 8 +-- .../exception/NotFoundException.java | 8 +-- .../swagger/generator/online/Generator.java | 18 +++--- .../generator/resource/SwaggerResource.java | 7 ++- .../generator/util/ValidationException.java | 3 - .../swagger/generator/GeneratorInputTest.java | 1 + .../online/OnlineGeneratorOptionsTest.java | 9 +-- .../online/OnlineJavaClientOptionsTest.java | 1 + 102 files changed, 273 insertions(+), 250 deletions(-) diff --git a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/SwaggerCodegen.java b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/SwaggerCodegen.java index 502e4d046bae..98c0b8c05b5e 100644 --- a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/SwaggerCodegen.java +++ b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/SwaggerCodegen.java @@ -21,6 +21,7 @@ public class SwaggerCodegen { public static void main(String[] args) { + @SuppressWarnings("unchecked") Cli.CliBuilder builder = Cli.builder("swagger-codegen-cli") .withDescription("Swagger code generator CLI. More info on swagger.io") .withDefaultCommand(Langs.class) diff --git a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Generate.java b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Generate.java index d72295f4ca97..4fad4308a670 100644 --- a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Generate.java +++ b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Generate.java @@ -230,15 +230,15 @@ public class Generate implements Runnable { } } - private Set createSetFromCsvList(String csvProperty) { + private static Set createSetFromCsvList(String csvProperty) { final List values = OptionUtils.splitCommaSeparatedList(csvProperty); return new HashSet(values); } - private Map createMapFromKeyValuePairs(String commaSeparatedKVPairs) { + private static Map createMapFromKeyValuePairs(String commaSeparatedKVPairs) { final List> pairs = OptionUtils.parseCommaSeparatedTuples(commaSeparatedKVPairs); - Map result = new HashMap(); + Map result = new HashMap(); for (Pair pair : pairs) { result.put(pair.getLeft(), pair.getRight()); diff --git a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java index 9843024b1043..348c94d92b0c 100644 --- a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java +++ b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java @@ -93,7 +93,7 @@ public class Meta implements Runnable { * @param data - map with additional params needed to process templates * @return converter object to pass to lambdaj */ - private Converter processFiles(final File targetDir, final Map data) { + private static Converter processFiles(final File targetDir, final Map data) { return new Converter() { private DefaultGenerator generator = new DefaultGenerator(); @@ -133,7 +133,7 @@ public class Meta implements Runnable { * @param generator - class with reader getter * @return loader for template */ - private Mustache.TemplateLoader loader(final DefaultGenerator generator) { + private static Mustache.TemplateLoader loader(final DefaultGenerator generator) { return new Mustache.TemplateLoader() { @Override public Reader getTemplate(String name) { @@ -149,7 +149,7 @@ public class Meta implements Runnable { * @param packageName - package name to convert * @return relative path */ - private String asPath(String packageName) { + private static String asPath(String packageName) { return packageName.replace(".", File.separator); } } diff --git a/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/GenerateTest.java b/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/GenerateTest.java index e07d0be4610d..36a560b776de 100644 --- a/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/GenerateTest.java +++ b/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/GenerateTest.java @@ -12,6 +12,7 @@ import mockit.Verifications; import org.apache.commons.lang3.ArrayUtils; import org.testng.annotations.Test; +@SuppressWarnings("unused") public class GenerateTest { @Mocked diff --git a/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java b/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java index a7dc4d7f1cd4..650f05d58e60 100644 --- a/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java +++ b/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java @@ -41,7 +41,7 @@ public class OptionUtilsTest { } } - private void doCommaSeparatedListTest(String csvStr, List expectedResults) { + private static void doCommaSeparatedListTest(String csvStr, List expectedResults) { final List result = OptionUtils.splitCommaSeparatedList(csvStr); assertNotNull(result); assertEquals(result.size(), expectedResults.size()); 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 c56b86588e54..1608329f9532 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 @@ -99,7 +99,7 @@ public class CodeGenMojo extends AbstractMojo { * A map of language-specific parameters as passed with the -c option to the command line */ @Parameter(name = "configOptions") - private Map configOptions; + private Map configOptions; /** * Add the output directory to the project as a source root, so that the diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/AbstractGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/AbstractGenerator.java index d6bbb9fa5261..467d6e40b903 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/AbstractGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/AbstractGenerator.java @@ -14,6 +14,7 @@ import java.util.regex.Pattern; public abstract class AbstractGenerator { + @SuppressWarnings("static-method") public File writeToFile(String filename, String contents) throws IOException { System.out.println("writing file " + filename); File output = new File(filename); @@ -48,10 +49,7 @@ public abstract class AbstractGenerator { try { InputStream is = this.getClass().getClassLoader().getResourceAsStream(getCPResourcePath(name)); if (is == null) { - is = new FileInputStream(new File(name)); - } - if (is == null) { - throw new RuntimeException("no file found"); + is = new FileInputStream(new File(name)); // May throw but never return a null value } return new InputStreamReader(is); } catch (Exception e) { @@ -96,6 +94,7 @@ public abstract class AbstractGenerator { return this.getClass().getClassLoader().getResource(getCPResourcePath(name)) != null; } + @SuppressWarnings("static-method") public String getCPResourcePath(String name) { if (!"/".equals(File.separator)) { return name.replaceAll(Pattern.quote(File.separator), "/"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/ClientOptInput.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/ClientOptInput.java index 571498c3121f..57918dd9b354 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/ClientOptInput.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/ClientOptInput.java @@ -5,13 +5,8 @@ import io.swagger.codegen.auth.AuthParser; import io.swagger.models.Swagger; import io.swagger.models.auth.AuthorizationValue; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.ArrayList; import java.util.List; -import static org.apache.commons.lang3.StringUtils.isNotEmpty; - public class ClientOptInput { private CodegenConfig config; private ClientOpts opts; 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 ffb4a0112a57..3168808e5b17 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 @@ -11,7 +11,6 @@ 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; @@ -32,10 +31,9 @@ public class Codegen extends DefaultGenerator { "\n -DdebugOperations prints operations passed to the template engine" + "\n -DdebugSupportingFiles prints additional data passed to the template engine"; + @SuppressWarnings("deprecation") public static void main(String[] args) { - StringBuilder sb = new StringBuilder(); - Options options = new Options(); options.addOption("h", "help", false, "shows this message"); options.addOption("l", "lang", true, "client language to generate.\nAvailable languages include:\n\t[" + configString + "]"); @@ -139,7 +137,7 @@ public class Codegen extends DefaultGenerator { // see if it's a class try { System.out.println("loading class " + name); - Class customClass = Class.forName(name); + Class customClass = Class.forName(name); System.out.println("loaded"); return (CodegenConfig) customClass.newInstance(); } catch (Exception e) { 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 c5b9231341e1..956e906b44f9 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 @@ -38,7 +38,7 @@ public class CodegenOperation { * * @return true if parameter exists, false otherwise */ - private boolean nonempty(List params) { + private static boolean nonempty(List params) { return params != null && params.size() > 0; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenProperty.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenProperty.java index 87352907ad0b..d80bc38a4c75 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenProperty.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenProperty.java @@ -40,6 +40,50 @@ public class CodegenProperty { public CodegenProperty items; public Map vendorExtensions; + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((_enum == null) ? 0 : _enum.hashCode()); + result = prime * result + ((allowableValues == null) ? 0 : allowableValues.hashCode()); + result = prime * result + ((baseName == null) ? 0 : baseName.hashCode()); + result = prime * result + ((baseType == null) ? 0 : baseType.hashCode()); + result = prime * result + ((complexType == null) ? 0 : complexType.hashCode()); + result = prime * result + ((containerType == null) ? 0 : containerType.hashCode()); + result = prime * result + ((datatype == null) ? 0 : datatype.hashCode()); + result = prime * result + ((datatypeWithEnum == null) ? 0 : datatypeWithEnum.hashCode()); + result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode()); + result = prime * result + ((defaultValueWithParam == null) ? 0 : defaultValueWithParam.hashCode()); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((example == null) ? 0 : example.hashCode()); + result = prime * result + ((exclusiveMaximum == null) ? 0 : exclusiveMaximum.hashCode()); + result = prime * result + ((exclusiveMinimum == null) ? 0 : exclusiveMinimum.hashCode()); + result = prime * result + ((getter == null) ? 0 : getter.hashCode()); + result = prime * result + ((hasMore == null) ? 0 : hasMore.hashCode()); + result = prime * result + ((isContainer == null) ? 0 : isContainer.hashCode()); + result = prime * result + (isEnum ? 1231 : 1237); + result = prime * result + ((isNotContainer == null) ? 0 : isNotContainer.hashCode()); + result = prime * result + ((isPrimitiveType == null) ? 0 : isPrimitiveType.hashCode()); + result = prime * result + ((isReadOnly == null) ? 0 : isReadOnly.hashCode()); + result = prime * result + ((items == null) ? 0 : items.hashCode()); + result = prime * result + ((jsonSchema == null) ? 0 : jsonSchema.hashCode()); + result = prime * result + ((max == null) ? 0 : max.hashCode()); + result = prime * result + ((maxLength == null) ? 0 : maxLength.hashCode()); + result = prime * result + ((maximum == null) ? 0 : maximum.hashCode()); + result = prime * result + ((min == null) ? 0 : min.hashCode()); + result = prime * result + ((minLength == null) ? 0 : minLength.hashCode()); + result = prime * result + ((minimum == null) ? 0 : minimum.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((pattern == null) ? 0 : pattern.hashCode()); + result = prime * result + ((required == null) ? 0 : required.hashCode()); + result = prime * result + ((secondaryParam == null) ? 0 : secondaryParam.hashCode()); + result = prime * result + ((setter == null) ? 0 : setter.hashCode()); + result = prime * result + ((unescapedDescription == null) ? 0 : unescapedDescription.hashCode()); + result = prime * result + ((vendorExtensions == null) ? 0 : vendorExtensions.hashCode()); + return result; + } + @Override public boolean equals(Object obj) { if (obj == null) { 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 abc4d045315e..030c22e37944 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 @@ -106,38 +106,48 @@ public class DefaultCodegen { } // override with any special post-processing + @SuppressWarnings("static-method") public Map postProcessModels(Map objs) { return objs; } // override with any special post-processing + @SuppressWarnings("static-method") public Map postProcessOperations(Map objs) { return objs; } // override with any special post-processing + @SuppressWarnings("static-method") public Map postProcessSupportingFileData(Map objs) { return objs; } // override to post-process any model properties - public void postProcessModelProperty(CodegenModel model, CodegenProperty property){} + @SuppressWarnings("unused") + public void postProcessModelProperty(CodegenModel model, CodegenProperty property){ + } // override to post-process any parameters - public void postProcessParameter(CodegenParameter parameter){} + @SuppressWarnings("unused") + public void postProcessParameter(CodegenParameter parameter){ + } //override with any special handling of the entire swagger spec + @SuppressWarnings("unused") public void preprocessSwagger(Swagger swagger) { } // override with any special handling of the entire swagger spec + @SuppressWarnings("unused") public void processSwagger(Swagger swagger) { } // override with any special text escaping logic + @SuppressWarnings("static-method") public String escapeText(String input) { - if (input != null) { - input = input.trim(); + if (input != null) { + input = input.trim(); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. String output = input.replaceAll("\n", "\\\\n"); output = output.replace("\r", "\\r"); output = output.replace("\"", "\\\""); @@ -286,6 +296,7 @@ public class DefaultCodegen { * @param operationId operation ID * @return the sanitized method name */ + @SuppressWarnings("static-method") public String toOperationId(String operationId) { // throw exception if method name is empty if (StringUtils.isEmpty(operationId)) { @@ -318,7 +329,7 @@ public class DefaultCodegen { * @return the sanitized parameter name */ public String toParamName(String name) { - name = removeNonNameElementToCamelCase(name); + name = removeNonNameElementToCamelCase(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if (reservedWords.contains(name)) { return escapeReservedWord(name); } @@ -331,6 +342,7 @@ public class DefaultCodegen { * @param property Codegen property object * @return the Enum name */ + @SuppressWarnings("static-method") public String toEnumName(CodegenProperty property) { return StringUtils.capitalize(property.name) + "Enum"; } @@ -343,6 +355,7 @@ public class DefaultCodegen { * * throws Runtime exception as reserved word is not allowed (default behavior) */ + @SuppressWarnings("static-method") public String escapeReservedWord(String name) { throw new RuntimeException("reserved word " + name + " not allowed"); } @@ -452,6 +465,7 @@ public class DefaultCodegen { * @param operation Swagger operation object * @return string presentation of the example path */ + @SuppressWarnings("static-method") public String generateExamplePath(String path, Operation operation) { StringBuilder sb = new StringBuilder(); sb.append(path); @@ -534,6 +548,7 @@ public class DefaultCodegen { * @param p Swagger property object * @return string presentation of the default value of the property */ + @SuppressWarnings("static-method") public String toDefaultValue(Property p) { if (p instanceof StringProperty) { return "null"; @@ -580,6 +595,7 @@ public class DefaultCodegen { * @param p Swagger property object * @return string presentation of the default value of the property */ + @SuppressWarnings("static-method") public String toDefaultValueWithParam(String name, Property p) { if (p instanceof StringProperty) { return " = data." + name + ";"; @@ -623,6 +639,7 @@ public class DefaultCodegen { * @param p Swagger property object * @return string presentation of the type **/ + @SuppressWarnings("static-method") public String getSwaggerType(Property p) { String datatype = null; if (p instanceof StringProperty && "number".equals(p.getFormat())) { @@ -677,6 +694,7 @@ public class DefaultCodegen { * @param name string to be snake-cased * @return snake-cased string */ + @SuppressWarnings("static-method") public String snakeCase(String name) { return (name.length() > 0) ? (Character.toLowerCase(name.charAt(0)) + name.substring(1)) : ""; } @@ -687,6 +705,7 @@ public class DefaultCodegen { * @param name string to be capitalized * @return capitalized string */ + @SuppressWarnings("static-method") public String initialCaps(String name) { return StringUtils.capitalize(name); } @@ -697,6 +716,7 @@ public class DefaultCodegen { * @param name name * @return a string presentation of the type */ + @SuppressWarnings("static-method") public String getTypeDeclaration(String name) { return name; } @@ -1102,7 +1122,7 @@ public class DefaultCodegen { } } - private Response findMethodResponse(Map responses) { + private static Response findMethodResponse(Map responses) { String code = null; for (String responseCode : responses.keySet()) { @@ -1575,7 +1595,6 @@ public class DefaultCodegen { // to use the built-in model parsing, we unwrap the ArrayModel // and get a single property from it ArrayModel impl = (ArrayModel) model; - CodegenModel cm = fromModel(bp.getName(), impl); // get the single property ArrayProperty ap = new ArrayProperty().items(impl.getItems()); ap.setRequired(param.getRequired()); @@ -1616,6 +1635,7 @@ public class DefaultCodegen { * @param schemes a map of Swagger SecuritySchemeDefinition object * @return a list of Codegen Security objects */ + @SuppressWarnings("static-method") public List fromSecurity(Map schemes) { if (schemes == null) { return Collections.emptyList(); @@ -1722,6 +1742,7 @@ public class DefaultCodegen { && !languageSpecificPrimitives.contains(type); } + @SuppressWarnings("static-method") protected List> toExamples(Map examples) { if (examples == null) { return null; @@ -1745,7 +1766,7 @@ public class DefaultCodegen { } } - private List addHasMore(List objs) { + private static List addHasMore(List objs) { if (objs != null) { for (int i = 0; i < objs.size(); i++) { if (i > 0) { @@ -1759,7 +1780,7 @@ public class DefaultCodegen { return objs; } - private Map addHasMore(Map objs) { + private static Map addHasMore(Map objs) { if (objs != null) { for (int i = 0; i < objs.size() - 1; i++) { if (i > 0) { @@ -1782,6 +1803,7 @@ public class DefaultCodegen { * @param co Codegen Operation object * @param operations map of Codegen operations */ + @SuppressWarnings("static-method") public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { List opList = operations.get(tag); if (opList == null) { @@ -1806,8 +1828,6 @@ public class DefaultCodegen { co.baseName = tag; } - - private void addParentContainer(CodegenModel m, String name, Property property) { final CodegenProperty tmp = fromProperty(name, property); addImport(m, tmp.complexType); @@ -1836,7 +1856,7 @@ public class DefaultCodegen { String secondPattern = "([a-z\\d])([A-Z])"; String replacementPattern = "$1_$2"; // Replace package separator with slash. - word = word.replaceAll("\\.", "/"); + word = word.replaceAll("\\.", "/"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // Replace $ with two underscores for inner classes. word = word.replaceAll("\\$", "__"); // Replace capital letter with _ plus lowercase letter. @@ -1853,6 +1873,7 @@ public class DefaultCodegen { * @param word The word * @return The dashized version of the word, e.g. "my-name" */ + @SuppressWarnings("static-method") protected String dashize(String word) { return underscore(word).replaceAll("[_ ]", "-"); } @@ -1867,7 +1888,7 @@ public class DefaultCodegen { * @param name The base name * @return The next name for the base name */ - private String generateNextName(String name) { + private static String generateNextName(String name) { Pattern pattern = Pattern.compile("\\d+\\z"); Matcher matcher = pattern.matcher(name); if (matcher.find()) { @@ -1932,9 +1953,10 @@ public class DefaultCodegen { * @param name string to be camelize * @return camelized string */ + @SuppressWarnings("static-method") public String removeNonNameElementToCamelCase(String name) { String nonNameElementPattern = "[-_:;#]"; - name = StringUtils.join(Lists.transform(Lists.newArrayList(name.split(nonNameElementPattern)), new Function() { + name = StringUtils.join(Lists.transform(Lists.newArrayList(name.split(nonNameElementPattern)), new Function() { // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. @Nullable @Override public String apply(String input) { @@ -1971,7 +1993,7 @@ public class DefaultCodegen { Pattern p = Pattern.compile("\\/(.?)"); Matcher m = p.matcher(word); while (m.find()) { - word = m.replaceFirst("." + m.group(1)/*.toUpperCase()*/); + word = m.replaceFirst("." + m.group(1)/*.toUpperCase()*/); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. m = p.matcher(word); } @@ -2062,6 +2084,7 @@ public class DefaultCodegen { return library; } + @SuppressWarnings("static-method") protected CliOption buildLibraryCliOption(Map supportedLibraries) { StringBuilder sb = new StringBuilder("library template (sub-template) to use:"); for (String lib : supportedLibraries.keySet()) { @@ -2076,6 +2099,7 @@ public class DefaultCodegen { * @param name string to be sanitize * @return sanitized string */ + @SuppressWarnings("static-method") public String sanitizeName(String name) { // NOTE: performance wise, we should have written with 2 replaceAll to replace desired // character with _ or empty character. Below aims to spell out different cases we've @@ -2089,7 +2113,7 @@ public class DefaultCodegen { } // input[] => input - name = name.replaceAll("\\[\\]", ""); + name = name.replaceAll("\\[\\]", ""); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // input[a][b] => input_a_b name = name.replaceAll("\\[", "_"); @@ -2111,6 +2135,5 @@ public class DefaultCodegen { // remove everything else other than word, number and _ // $php_variable => php_variable return name.replaceAll("[^a-zA-Z0-9_]", ""); - } } 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 79b07f2427bd..6943057f558f 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 @@ -403,7 +403,6 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { System.out.println("can't open " + outputFile + " for output"); } } - files.add(outputFile); } } @@ -412,13 +411,11 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } } } - config.processSwagger(swagger); - return files; } - private void processMimeTypes(List mimeTypeList, Map operation, String source) { + private static void processMimeTypes(List mimeTypeList, Map operation, String source) { if (mimeTypeList != null && mimeTypeList.size() > 0) { List> c = new ArrayList>(); int count = 0; @@ -439,7 +436,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } } - private List sortModelsByInheritance(final Map definitions) { + private static List sortModelsByInheritance(final Map definitions) { List sortedModelKeys = new ArrayList(definitions.keySet()); Comparator cmp = new Comparator() { @Override @@ -609,10 +606,11 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } } - private String generateParameterId(Parameter parameter) { + private static String generateParameterId(Parameter parameter) { return parameter.getName() + ":" + parameter.getIn(); } + @SuppressWarnings("static-method") protected String sanitizeTag(String tag) { // remove spaces and make strong case String[] parts = tag.split(" "); @@ -625,6 +623,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { return buf.toString().replaceAll("[^a-zA-Z ]", ""); } + @SuppressWarnings("static-method") public Map processOperations(CodegenConfig config, String tag, List ops) { Map operations = new HashMap(); Map objs = new HashMap(); @@ -685,6 +684,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { return operations; } + @SuppressWarnings("static-method") public Map processModels(CodegenConfig config, Map definitions, Map allDefinitions) { Map objs = new HashMap(); objs.put("package", config.modelPackage()); @@ -704,7 +704,6 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { Set importSet = new TreeSet(); for (String nextImport : allImports) { - Map im = new HashMap(); String mapping = config.importMapping().get(nextImport); if (mapping == null) { mapping = config.toModelImport(nextImport); 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 2e698162182d..bd22f40616b9 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,10 +1,8 @@ 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; -import io.swagger.models.parameters.RefParameter; import io.swagger.models.properties.*; import io.swagger.util.Json; @@ -174,9 +172,7 @@ public class InlineModelResolver { m.setItems(new RefProperty(existing)); } } - } else if (model instanceof ComposedModel) { - ComposedModel m = (ComposedModel) model; - } + } } } } @@ -199,7 +195,7 @@ public class InlineModelResolver { public String uniqueName(String key) { int count = 0; boolean done = false; - key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", ""); + key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", ""); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. while (!done) { String name = key; if (count > 0) { @@ -295,53 +291,26 @@ public class InlineModelResolver { } } - public Model modelFromProperty(ArrayProperty object, String path) { - String access = object.getAccess(); + @SuppressWarnings("static-method") + public Model modelFromProperty(ArrayProperty object, @SuppressWarnings("unused") String path) { 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(); 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(); @@ -358,17 +327,10 @@ public class InlineModelResolver { return model; } - public Model modelFromProperty(MapProperty object, String path) { - String access = object.getAccess(); + @SuppressWarnings("static-method") + public Model modelFromProperty(MapProperty object, @SuppressWarnings("unused") String path) { 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); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/MetaGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/MetaGenerator.java index 818edab02147..e528fb51f52d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/MetaGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/MetaGenerator.java @@ -2,7 +2,6 @@ package io.swagger.codegen; import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Template; -import io.swagger.models.Swagger; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -57,8 +56,6 @@ public class MetaGenerator extends AbstractGenerator { } protected void generate(String[] args) { - StringBuilder sb = new StringBuilder(); - String targetLanguage = null; String outputFolder = null; String name = null; String targetPackage = "io.swagger.codegen"; @@ -71,12 +68,9 @@ public class MetaGenerator extends AbstractGenerator { options.addOption("n", "name", true, "the human-readable name of the generator"); options.addOption("p", "package", true, "the package to put the main class into (defaults to io.swagger.codegen"); - ClientOptInput clientOptInput = new ClientOptInput(); - Swagger swagger = null; CommandLine cmd = null; try { CommandLineParser parser = new BasicParser(); - cmd = parser.parse(options, args); if (cmd.hasOption("h")) { usage(options); @@ -85,12 +79,11 @@ public class MetaGenerator extends AbstractGenerator { if (cmd.hasOption("n")) { name = cmd.getOptionValue("n"); } else { - System.out.println("name is required"); + System.out.println("name is required"); //FIXME replace by LOGGER usage(options); return; } if (cmd.hasOption("l")) { - targetLanguage = cmd.getOptionValue("l"); } if (cmd.hasOption("p")) { targetPackage = cmd.getOptionValue("p"); @@ -98,7 +91,7 @@ public class MetaGenerator extends AbstractGenerator { if (cmd.hasOption("o")) { outputFolder = cmd.getOptionValue("o"); } else { - System.out.println("output folder is required"); + System.out.println("output folder is required"); // FIXME replace by LOGGER usage(options); return; } @@ -161,8 +154,6 @@ public class MetaGenerator extends AbstractGenerator { public Reader getTemplate(String name) { return getTemplateReader(templateDir + File.separator + name + ".mustache"); } - - ; }) .defaultValue("") .compile(template); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/SupportingFile.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/SupportingFile.java index 53c6ca5ab9b9..976376bae682 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/SupportingFile.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/SupportingFile.java @@ -11,6 +11,7 @@ public class SupportingFile { this.destinationFilename = destinationFilename; } + @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("SupportingFile:").append("\n"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/auth/AuthParser.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/auth/AuthParser.java index 5fb41755184d..4fb39517cd4b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/auth/AuthParser.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/auth/AuthParser.java @@ -18,7 +18,7 @@ public class AuthParser { for (String part : parts) { String[] kvPair = part.split(":"); if (kvPair.length == 2) { - auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0]), URLDecoder.decode(kvPair[1]), "header")); + auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0]), URLDecoder.decode(kvPair[1]), "header")); // FIXME replace the deprecated method by decode(string, encoding). Which encoding is used ? Default UTF-8 ? } } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index 6d6062e93c8b..1115a4b709d9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -42,7 +42,7 @@ public class ExampleGenerator { if (examples == null) { if (mediaTypes == null) { // assume application/json for this - mediaTypes = Arrays.asList("application/json"); + mediaTypes = Arrays.asList("application/json"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. } for (String mediaType : mediaTypes) { Map kv = new HashMap(); @@ -127,7 +127,7 @@ public class ExampleGenerator { return resolveModelToExample(simpleName, mediaType, model, processedModels); } } else if (property instanceof UUIDProperty) { - return "046b6c7f-0b8a-43b9-b35d-6489e6daee91"; + return "046b6c7f-0b8a-43b9-b35d-6489e6daee91"; } return ""; @@ -142,16 +142,14 @@ public class ExampleGenerator { ModelImpl impl = (ModelImpl) model; Map values = new HashMap(); - if (impl != null && impl.getProperties() != null) { + if (impl.getProperties() != null) { for (String propertyName : impl.getProperties().keySet()) { Property property = impl.getProperties().get(propertyName); values.put(propertyName, resolvePropertyToExample(mediaType, property, processedModels)); } } - return values; } - return ""; } } \ No newline at end of file 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 15f22dfe8ffd..bf4896ac5d8d 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 @@ -39,7 +39,7 @@ public class XmlExampleGenerator { public XmlExampleGenerator(Map examples) { this.examples = examples; if (examples == null) { - examples = new HashMap(); + examples = new HashMap(); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. } } @@ -74,10 +74,6 @@ public class XmlExampleGenerator { Map elements = new LinkedHashMap(); String name = modelName; - String namespace; - String prefix; - Boolean wrapped; - Xml xml = model.getXml(); if (xml != null) { if (xml.getName() != null) { @@ -117,6 +113,7 @@ public class XmlExampleGenerator { return sb.toString(); } + @SuppressWarnings("static-method") protected String quote(String string) { return "\"" + string + "\""; } @@ -211,14 +208,17 @@ public class XmlExampleGenerator { return "not implemented " + property; } + @SuppressWarnings("static-method") protected String openTag(String name) { return "<" + name + ">"; } + @SuppressWarnings("static-method") protected String closeTag(String name) { return ""; } + @SuppressWarnings("static-method") protected String indent(int indent) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < indent; i++) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index cdfc01d2f82e..fe7fe08eb12e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -73,7 +73,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp @Override public String toVarName(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, do nothing if (name.matches("^[A-Z_]*$")) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java index aa5d314184b4..69fc84567646 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AkkaScalaClientCodegen.java @@ -63,7 +63,9 @@ public class AkkaScalaClientCodegen extends DefaultCodegen implements CodegenCon * unmarshalling problems and any other RuntimeException will be considered as ApiErrors. */ protected boolean onlyOneSuccess = true; - Logger LOGGER = LoggerFactory.getLogger(AkkaScalaClientCodegen.class); + + @SuppressWarnings("hiding") + protected Logger LOGGER = LoggerFactory.getLogger(AkkaScalaClientCodegen.class); public AkkaScalaClientCodegen() { super(); 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 ac84e7c795d2..ffe1467a7e7a 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 @@ -7,7 +7,6 @@ import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; import io.swagger.models.properties.ArrayProperty; -import io.swagger.models.properties.BooleanProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; @@ -151,7 +150,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi @Override public String toVarName(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, do nothing if (name.matches("^[A-Z_]*$")) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java index bac6efe2aff5..78017feb583f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AsyncScalaClientCodegen.java @@ -23,8 +23,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import org.apache.commons.lang.StringUtils; - public class AsyncScalaClientCodegen extends DefaultCodegen implements CodegenConfig { protected String invokerPackage = "io.swagger.client"; protected String groupId = "io.swagger"; 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 23c266e618fc..0ab69bd54332 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 @@ -22,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { + @SuppressWarnings("unused") private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); protected boolean optionalAssemblyInfoFlag = true; protected boolean optionalMethodArgumentFlag = true; @@ -229,7 +230,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, do nothing if (name.matches("^[A-Z_]*$")) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ClojureClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ClojureClientCodegen.java index d4a8ada06b97..5228c86457ff 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ClojureClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ClojureClientCodegen.java @@ -172,7 +172,7 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi @Override public String toVarName(String name) { - name = name.replaceAll("[^a-zA-Z0-9_-]+", ""); + name = name.replaceAll("[^a-zA-Z0-9_-]+", ""); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. name = dashize(name); return name; } @@ -196,6 +196,7 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi return operations; } + @SuppressWarnings("static-method") protected String namespaceToFolder(String ns) { return ns.replace(".", File.separator).replace("-", "_"); } 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 3ad108e2e61d..d3d249bfcd26 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 @@ -172,7 +172,7 @@ public class CsharpDotNet2ClientCodegen extends DefaultCodegen implements Codege @Override public String toVarName(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, do nothing if (name.matches("^[A-Z_]*$")) { 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 7d11f2a81838..b4039b03b8c5 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 @@ -168,7 +168,7 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toVarName(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, do nothing if (name.matches("^[A-Z_]*$")) { @@ -218,15 +218,10 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toDefaultValue(Property p) { if (p instanceof MapProperty) { - MapProperty ap = (MapProperty) p; - String inner = getSwaggerType(ap.getAdditionalProperties()); return "{}"; } else if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - String inner = getSwaggerType(ap.getItems()); return "[]"; } - return super.toDefaultValue(p); } 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 dac3d23b22ac..fd49d59fd27e 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 @@ -190,14 +190,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String getTypeDeclaration(Property p) { - if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - Property inner = ap.getItems(); - return getSwaggerType(p); - } else if (p instanceof MapProperty) { - MapProperty mp = (MapProperty) p; - Property inner = mp.getAdditionalProperties(); - + if (p instanceof ArrayProperty || p instanceof MapProperty) { return getSwaggerType(p); } return super.getTypeDeclaration(p); @@ -253,12 +246,8 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig } return "0"; } else if (p instanceof MapProperty) { - MapProperty ap = (MapProperty) p; - String inner = getSwaggerType(ap.getAdditionalProperties()); return "new Dictionary()"; } else if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - String inner = getSwaggerType(ap.getItems()); return "new Array()"; } else { return "null"; @@ -268,8 +257,8 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toVarName(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); - + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + // if it's all uppper case, convert to lower case if (name.matches("^[A-Z_]*$")) { name = name.toLowerCase(); @@ -320,7 +309,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toApiFilename(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // e.g. PhoneNumberApi.rb => phone_number_api.rb return camelize(name) + "Api"; @@ -373,7 +362,4 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig public void setSourceFolder(String sourceFolder) { this.sourceFolder = sourceFolder; } - } - - diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java index 483e841d7355..6d6d1c5ba227 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java @@ -249,7 +249,7 @@ public class FlaskConnexionCodegen extends DefaultCodegen implements CodegenConf } @SuppressWarnings("unchecked") - private List> getOperations(Map objs) { + private static List> getOperations(Map objs) { List> result = new ArrayList>(); Map apiInfo = (Map) objs.get("apiInfo"); List> apis = (List>) apiInfo.get("apis"); @@ -259,7 +259,7 @@ public class FlaskConnexionCodegen extends DefaultCodegen implements CodegenConf return result; } - private List> sortOperationsByPath(List ops) { + private static List> sortOperationsByPath(List ops) { Multimap opsByPath = ArrayListMultimap.create(); for (CodegenOperation op : ops) { @@ -304,7 +304,7 @@ public class FlaskConnexionCodegen extends DefaultCodegen implements CodegenConf @Override public String toOperationId(String operationId) { - operationId = super.toOperationId(operationId); + operationId = super.toOperationId(operationId); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // Use the part after the last dot, e.g. // controllers.defaultController.addPet => addPet operationId = operationId.replaceAll(".*\\.", ""); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JMeterCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JMeterCodegen.java index 429d992b7ef8..903cb7ba76eb 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JMeterCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JMeterCodegen.java @@ -5,8 +5,6 @@ import io.swagger.models.Operation; import io.swagger.models.Path; import io.swagger.models.Swagger; import io.swagger.models.properties.*; -import org.apache.commons.lang.StringUtils; - import java.util.*; import java.io.File; 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 8a09eb34ea9b..37c73af7f801 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 @@ -17,6 +17,7 @@ import java.io.File; import java.util.*; public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { + @SuppressWarnings("hiding") private static final Logger LOGGER = LoggerFactory.getLogger(JavaClientCodegen.class); public static final String FULL_JAVA_UTIL = "fullJavaUtil"; public static final String DEFAULT_LIBRARY = ""; @@ -292,7 +293,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if("_".equals(name)) { name = "_u"; @@ -323,7 +324,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toModelName(String name) { - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // model name cannot use reserved keyword, e.g. return if (reservedWords.contains(name)) { @@ -617,7 +618,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { } } - private String getAccept(Operation operation) { + private static String getAccept(Operation operation) { String accepts = null; String defaultContentType = "application/json"; if (operation.getProduces() != null && !operation.getProduces().isEmpty()) { @@ -648,14 +649,14 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { return super.needToImport(type) && type.indexOf(".") < 0; } - private String findCommonPrefixOfVars(List vars) { + private static String findCommonPrefixOfVars(List vars) { String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); // exclude trailing characters that should be part of a valid variable // e.g. ["status-on", "status-off"] => "status-" (not "status-o") return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); } - private String toEnumVarName(String value) { + private static String toEnumVarName(String value) { String var = value.replaceAll("\\W+", "_").toUpperCase(); if (var.matches("\\d.*")) { return "_" + var; @@ -664,7 +665,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { } } - private CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) { + private static CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) { // This generator uses inline classes to define enums, which breaks when // dealing with models that have subTypes. To clean this up, we will analyze // the parent and child models, look for enums that match, and remove @@ -748,8 +749,8 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { this.serializableModel = serializableModel; } - private String sanitizePackageName(String packageName) { - packageName = packageName.trim(); + private static String sanitizePackageName(String packageName) { + packageName = packageName.trim(); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. packageName = packageName.replaceAll("[^a-zA-Z0-9_\\.]", "_"); if(Strings.isNullOrEmpty(packageName)) { return "invalidPackageName"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java index 01ca02f185d9..37ac0cf95074 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java @@ -11,7 +11,7 @@ import io.swagger.util.Yaml; import java.util.*; -public class JavaInflectorServerCodegen extends JavaClientCodegen implements CodegenConfig { +public class JavaInflectorServerCodegen extends JavaClientCodegen { protected String title = "Swagger Inflector"; public JavaInflectorServerCodegen() { @@ -174,7 +174,7 @@ public class JavaInflectorServerCodegen extends JavaClientCodegen implements Cod if (name.length() == 0) { return "DefaultController"; } - name = name.replaceAll("[^a-zA-Z0-9]+", "_"); + name = name.replaceAll("[^a-zA-Z0-9]+", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. return camelize(name)+ "Controller"; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index ac680d594632..94eae2cd94a8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -32,6 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JavascriptClientCodegen extends DefaultCodegen implements CodegenConfig { + @SuppressWarnings("hiding") private static final Logger LOGGER = LoggerFactory.getLogger(JavascriptClientCodegen.class); private static final String PROJECT_NAME = "projectName"; @@ -225,7 +226,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if("_".equals(name)) { name = "_u"; @@ -256,7 +257,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo @Override public String toModelName(String name) { - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // model name cannot use reserved keyword, e.g. return if (reservedWords.contains(name)) { @@ -287,8 +288,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo @Override public String getTypeDeclaration(Property p) { if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - Property inner = ap.getItems(); + // ArrayProperty ap = (ArrayProperty) p; + // Property inner = ap.getItems(); return getSwaggerType(p); // TODO: + "/* <" + getTypeDeclaration(inner) + "> */"; } else if (p instanceof MapProperty) { MapProperty mp = (MapProperty) p; @@ -329,15 +330,12 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo } else if (p instanceof MapProperty) { return " = {}"; } else if (p instanceof LongProperty) { - LongProperty dp = (LongProperty) p; return " = data." + name + ";"; // added for Javascript } else if (p instanceof RefProperty) { - RefProperty rp = (RefProperty)p; return ".constructFromObject(data." + name + ");"; } - return super.toDefaultValueWithParam(name, p); } @@ -465,14 +463,14 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo && !languageSpecificPrimitives.contains(type); } - private String findCommonPrefixOfVars(List vars) { + private static String findCommonPrefixOfVars(List vars) { String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); // exclude trailing characters that should be part of a valid variable // e.g. ["status-on", "status-off"] => "status-" (not "status-o") return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); } - private String toEnumVarName(String value) { + private static String toEnumVarName(String value) { String var = value.replaceAll("\\W+", "_").toUpperCase(); if (var.matches("\\d.*")) { return "_" + var; @@ -481,7 +479,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo } } - private CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) { + private static CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) { // This generator uses inline classes to define enums, which breaks when // dealing with models that have subTypes. To clean this up, we will analyze // the parent and child models, look for enums that match, and remove @@ -529,13 +527,12 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo return codegenModel; } - private String sanitizePackageName(String packageName) { - packageName = packageName.trim(); + private static String sanitizePackageName(String packageName) { + packageName = packageName.trim(); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. packageName = packageName.replaceAll("[^a-zA-Z0-9_\\.]", "_"); if(Strings.isNullOrEmpty(packageName)) { return "invalidPackageName"; } return packageName; } - } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index 5814751d63c9..8ef4056ee5aa 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -8,7 +8,7 @@ import io.swagger.models.Swagger; import java.io.File; import java.util.*; -public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConfig { +public class JaxRSServerCodegen extends JavaClientCodegen { protected String dateLibrary = "default"; protected String title = "Swagger Server"; protected String implFolder = "src/main/java"; @@ -180,7 +180,7 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf } } this.additionalProperties.put("serverPort", port); - if(swagger != null && swagger.getPaths() != null) { + if( swagger.getPaths() != null) { for(String pathname : swagger.getPaths().keySet()) { Path path = swagger.getPath(pathname); if(path.getOperations() != null) { @@ -256,7 +256,7 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf if (name.length() == 0) { return "DefaultApi"; } - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. return camelize(name) + "Api"; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java index f463fbc473f4..6fa031050bb0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java @@ -212,7 +212,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig } @SuppressWarnings("unchecked") - private List> getOperations(Map objs) { + private static List> getOperations(Map objs) { List> result = new ArrayList>(); Map apiInfo = (Map) objs.get("apiInfo"); List> apis = (List>) apiInfo.get("apis"); @@ -222,7 +222,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig return result; } - private List> sortOperationsByPath(List ops) { + private static List> sortOperationsByPath(List ops) { Multimap opsByPath = ArrayListMultimap.create(); for (CodegenOperation op : ops) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java index dd002a12b190..76739f5ab3c3 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java @@ -219,12 +219,8 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toInstantiationType(Property p) { if (p instanceof MapProperty) { - MapProperty ap = (MapProperty) p; - String inner = getSwaggerType(ap.getAdditionalProperties()); return instantiationTypes.get("map"); } else if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - String inner = getSwaggerType(ap.getItems()); return instantiationTypes.get("array"); } else { return null; @@ -312,7 +308,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toModelName(String type) { - type = type.replaceAll("[^0-9a-zA-Z_]", "_"); + type = type.replaceAll("[^0-9a-zA-Z_]", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // language build-in classes if (typeMapping.keySet().contains(type) || @@ -372,7 +368,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all upper case, do noting if (name.matches("^[A-Z_]$")) { @@ -409,6 +405,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { return "_" + name; } + @SuppressWarnings("static-method") public String escapeSpecialWord(String name) { return "var_" + name; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index 90fea3f4a9b8..afb190d7d551 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -7,7 +7,6 @@ import io.swagger.codegen.SupportingFile; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CliOption; import io.swagger.models.properties.ArrayProperty; -import io.swagger.models.properties.BooleanProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; @@ -182,14 +181,13 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { public String toVarName(String name) { // return the name in underscore style // PhoneNumber => phone_number - name = underscore(name); + name = underscore(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // parameter name starting with number won't compile // need to escape it by appending _ at the beginning if (name.matches("^\\d.*")) { name = "_" + name; } - return name; } @@ -220,7 +218,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toApiFilename(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // e.g. phone_number_api.rb => PhoneNumberApi.rb return camelize(name) + "Api"; 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 12e6b3ea8ed9..0381d09fb739 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 @@ -20,6 +20,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { + @SuppressWarnings("hiding") static Logger LOGGER = LoggerFactory.getLogger(PhpClientCodegen.class); public static final String VARIABLE_NAMING_CONVENTION = "variableNamingConvention"; @@ -116,9 +117,9 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { } public String toPackagePath(String packageName, String basePath) { - packageName = packageName.replace(invokerPackage, ""); + packageName = packageName.replace(invokerPackage, ""); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if (basePath != null && basePath.length() > 0) { - basePath = basePath.replaceAll("[\\\\/]?$", "") + File.separatorChar; + basePath = basePath.replaceAll("[\\\\/]?$", "") + File.separatorChar; // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. } String regFirstPathSeparator; @@ -313,7 +314,7 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if ("camelCase".equals(variableNamingConvention)) { // return the name in camelCase style @@ -343,7 +344,7 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toModelName(String name) { // Note: backslash ("\\") is allowed for e.g. "\\DateTime" - name = name.replaceAll("[^\\w\\\\]+", "_"); + name = name.replaceAll("[^\\w\\\\]+", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // remove dollar sign name = name.replaceAll("$", ""); 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 02ce858d0cd4..ba32286f2664 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 @@ -176,7 +176,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // remove dollar sign name = name.replaceAll("$", ""); @@ -209,7 +209,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toModelName(String name) { - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // remove dollar sign name = name.replaceAll("$", ""); @@ -291,6 +291,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig * (PEP 0008) Python packages should also have short, all-lowercase names, * although the use of underscores is discouraged. */ + @SuppressWarnings("static-method") public String generatePackageName(String packageName) { return underscore(packageName.replaceAll("[^\\w]+", "")); } 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 ddc4f35346f8..f5c2faef2c47 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 @@ -186,7 +186,6 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("api_error.mustache", gemFolder, "api_error.rb")); supportingFiles.add(new SupportingFile("configuration.mustache", gemFolder, "configuration.rb")); supportingFiles.add(new SupportingFile("version.mustache", gemFolder, "version.rb")); - String modelFolder = gemFolder + File.separator + modelPackage.replace("/", File.separator); } @@ -208,6 +207,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { /** * Generate Ruby module name from the gem name, e.g. use "SwaggerClient" for "swagger_client". */ + @SuppressWarnings("static-method") public String generateModuleName(String gemName) { return camelize(gemName.replaceAll("[^\\w]+", "_")); } @@ -215,6 +215,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { /** * Generate Ruby gem name from the module name, e.g. use "swagger_client" for "SwaggerClient". */ + @SuppressWarnings("static-method") public String generateGemName(String moduleName) { return underscore(moduleName.replaceAll("[^\\w]+", "")); } @@ -306,7 +307,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, convert to lower case if (name.matches("^[A-Z_]*$")) { @@ -333,7 +334,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toModelName(String name) { - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // model name cannot use reserved keyword, e.g. return if (reservedWords.contains(name)) { @@ -360,7 +361,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toApiFilename(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // e.g. PhoneNumberApi.rb => phone_number_api.rb return underscore(name) + "_api"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java index 4effb480048e..3647937f9ad9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java @@ -162,7 +162,7 @@ public class SilexServerCodegen extends DefaultCodegen implements CodegenConfig public String toVarName(String name) { // return the name in underscore style // PhoneNumber => phone_number - name = underscore(name); + name = underscore(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // parameter name starting with number won't compile // need to escape it by appending _ at the beginning diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java index e478c00341e2..8bb0b3383739 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java @@ -2,7 +2,6 @@ package io.swagger.codegen.languages; import com.fasterxml.jackson.core.JsonProcessingException; -import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; @@ -18,8 +17,6 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Map; -import org.apache.commons.lang.StringUtils; - public class SinatraServerCodegen extends DefaultCodegen implements CodegenConfig { protected String gemName; protected String moduleName; @@ -146,7 +143,7 @@ public class SinatraServerCodegen extends DefaultCodegen implements CodegenConfi @Override public String toVarName(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // if it's all uppper case, convert to lower case if (name.matches("^[A-Z_]*$")) { @@ -198,7 +195,7 @@ public class SinatraServerCodegen extends DefaultCodegen implements CodegenConfi @Override public String toApiFilename(String name) { // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); + name = name.replaceAll("-", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. // e.g. PhoneNumberApi.rb => phone_number_api.rb return underscore(name) + "_api"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java index ae28493fe7ce..18b3159fbf72 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java @@ -177,8 +177,7 @@ public class SlimFrameworkServerCodegen extends DefaultCodegen implements Codege @Override public String toVarName(String name) { - // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if ("camelCase".equals(variableNamingConvention)) { // return the name in camelCase style diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringMVCServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringMVCServerCodegen.java index 256f78b02b63..2c5287d5717b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringMVCServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringMVCServerCodegen.java @@ -6,7 +6,7 @@ import io.swagger.models.Operation; import java.io.File; import java.util.*; -public class SpringMVCServerCodegen extends JavaClientCodegen implements CodegenConfig { +public class SpringMVCServerCodegen extends JavaClientCodegen { public static final String CONFIG_PACKAGE = "configPackage"; protected String title = "Petstore Server"; protected String configPackage = ""; 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 ddd72e4230b3..7d3b53fe87b2 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 @@ -267,6 +267,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { return codegenProperty; } + @SuppressWarnings("static-method") public String toSwiftyEnumName(String value) { // Prevent from breaking properly cased identifier if (value.matches("[A-Z][a-z0-9]+[a-zA-Z0-9]*")) { @@ -286,7 +287,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { @Override public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions, Swagger swagger) { - path = normalizePath(path); + path = normalizePath(path); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. List parameters = operation.getParameters(); parameters = Lists.newArrayList(Iterators.filter(parameters.iterator(), new Predicate() { @Override diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java index 83241ddc5e70..7d8108b2a133 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java @@ -128,12 +128,8 @@ public class TizenClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toInstantiationType(Property p) { if (p instanceof MapProperty) { - MapProperty ap = (MapProperty) p; - String inner = getSwaggerType(ap.getAdditionalProperties()); return instantiationTypes.get("map"); } else if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - String inner = getSwaggerType(ap.getItems()); return instantiationTypes.get("array"); } else { return null; @@ -217,12 +213,8 @@ public class TizenClientCodegen extends DefaultCodegen implements CodegenConfig } else if (p instanceof DecimalProperty) { return "new Long()"; } else if (p instanceof MapProperty) { - MapProperty ap = (MapProperty) p; - String inner = getSwaggerType(ap.getAdditionalProperties()); return "new HashMap()"; } else if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - String inner = getSwaggerType(ap.getItems()); return "new ArrayList()"; } // else diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/akkascala/AkkaScalaClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/akkascala/AkkaScalaClientOptionsTest.java index 1b6f878b512a..7ad1ff07e2b0 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/akkascala/AkkaScalaClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/akkascala/AkkaScalaClientOptionsTest.java @@ -22,6 +22,7 @@ public class AkkaScalaClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 index 26d55d7e9b2f..538614436f42 100644 --- 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 @@ -22,6 +22,7 @@ public class AndroidClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/asyncscala/AsyncScalaClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/asyncscala/AsyncScalaClientOptionsTest.java index b6b90ae7a7c3..8ea0280434a0 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/asyncscala/AsyncScalaClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/asyncscala/AsyncScalaClientOptionsTest.java @@ -22,6 +22,7 @@ public class AsyncScalaClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java index 2245f2f58771..8108d206f3a3 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java @@ -45,6 +45,7 @@ public class CodegenConfiguratorTest { @Tested CodegenConfigurator configurator; + @SuppressWarnings("unused") @Test public void testVerbose() throws Exception { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java index 367977e2b052..c8d6b6a02bc1 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -22,6 +22,7 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 index 7e30e2b1cd0d..cb3854e2bd8f 100644 --- 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 @@ -22,6 +22,7 @@ public class CsharpDotNet2ClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java index b002fd999782..519ac4943ccb 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/dart/DartClientOptionsTest.java @@ -22,6 +22,7 @@ public class DartClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 index 21a9cb5e03b2..97f4036c4d96 100644 --- 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 @@ -24,6 +24,7 @@ public class FlashClienOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/inflector/JavaInflectorServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/inflector/JavaInflectorServerOptionsTest.java index 8c54a382993b..49399b3beef8 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/inflector/JavaInflectorServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/inflector/JavaInflectorServerOptionsTest.java @@ -21,6 +21,7 @@ public class JavaInflectorServerOptionsTest extends JavaClientOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 index 29166bc87500..2a4d582f7764 100644 --- 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 @@ -27,6 +27,7 @@ public class JavaClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaInheritanceTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaInheritanceTest.java index 66b48cd6b89f..dcd87b4d7008 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaInheritanceTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaInheritanceTest.java @@ -15,6 +15,7 @@ import org.testng.annotations.Test; public class JavaInheritanceTest { + @SuppressWarnings("static-method") @Test(description = "convert a composed model") public void javaInheritanceTest() { final Model model = new ComposedModel().parent(new RefModel("Base")) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelEnumTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelEnumTest.java index 2babdc189e1a..5ac5f7885909 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelEnumTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelEnumTest.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; +@SuppressWarnings("static-method") public class JavaModelEnumTest { @Test(description = "convert a java model with an enum") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java index dc815e351aa9..f8c8bae61289 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java @@ -24,6 +24,7 @@ import org.testng.annotations.Test; import java.util.List; +@SuppressWarnings("static-method") public class JavaModelTest { @Test(description = "convert a simple java model") 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 index 9ae5e6dc3e4b..4a4e6ff91802 100644 --- 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 @@ -31,7 +31,7 @@ public class AllowableValuesTest { } @DataProvider(name = PROVIDER_NAME) - private Object[][] resource() { + private static Object[][] resource() { final CodegenParameter param1 = new CodegenParameter(); final CodegenParameter param2 = new CodegenParameter() {{ allowableValues = ImmutableMap.of("values", ImmutableList.of("item1", "item2", "item3")); 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 index 055bb721ad81..a441a7984d28 100644 --- 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 @@ -22,6 +22,7 @@ public class JaxRSServerOptionsTest extends JavaClientOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java index 55219787f89d..b1ee5b0040a7 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java @@ -1,6 +1,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; + import io.swagger.codegen.languages.JaxRSServerCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; @@ -12,7 +13,9 @@ import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; +@SuppressWarnings("static-method") public class JaxrsJava8ModelTest { + @Test(description = "convert a simple java model with java8 types") public void simpleModelTest() { final Model model = new ModelImpl() diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java index 3f2ac1a9ec1b..c2cb65c78ca1 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java @@ -12,7 +12,9 @@ import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; +@SuppressWarnings("static-method") public class JaxrsJodaModelTest { + @Test(description = "convert a simple java model with Joda types") public void simpleModelTest() { final Model model = new ModelImpl() diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/BooleanOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/BooleanOptionsTest.java index da2d5e35e2ae..3566f2e98e29 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/BooleanOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/languages/BooleanOptionsTest.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +@SuppressWarnings("static-method") public class BooleanOptionsTest { private static final String OPTIONS_PROVIDER = "Codegen"; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java index ce905315ae3b..c1cfa43b08bf 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/nodejs/NodeJSServerOptionsTest.java @@ -22,6 +22,7 @@ public class NodeJSServerOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcClientOptionsTest.java index 33f20625e16e..795c6ee2d9cf 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcClientOptionsTest.java @@ -22,6 +22,7 @@ public class ObjcClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcModelTest.java index f48f20ce1191..7d3eeaa41087 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/objc/ObjcModelTest.java @@ -24,6 +24,7 @@ import org.testng.annotations.Test; import java.util.Map; +@SuppressWarnings("static-method") public class ObjcModelTest { @Test(description = "convert a simple java model") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SpringMVCServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SpringMVCServerOptionsProvider.java index e52373c3c081..a9d77c403938 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SpringMVCServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/SpringMVCServerOptionsProvider.java @@ -8,7 +8,7 @@ import java.util.Map; public class SpringMVCServerOptionsProvider extends JavaOptionsProvider { public static final String CONFIG_PACKAGE_VALUE = "configPackage"; - public static final String LIBRARY_VALUE = "j8-async"; + public static final String LIBRARY_VALUE = "j8-async"; //FIXME hidding value from super class @Override public String getLanguage() { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/perl/PerlClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/perl/PerlClientOptionsTest.java index d85b0c9dbc18..b277acbbe5c8 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/perl/PerlClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/perl/PerlClientOptionsTest.java @@ -22,6 +22,7 @@ public class PerlClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 index e50185a3e8db..fb5e21d1cce1 100644 --- 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 @@ -22,6 +22,7 @@ public class PhpClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpModelTest.java index 79da2d2ccda4..3cad349a882e 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/php/PhpModelTest.java @@ -18,6 +18,7 @@ import com.google.common.collect.Sets; import org.testng.Assert; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class PhpModelTest { @Test(description = "convert a simple php model") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java index fc68a9e92e19..2682200e60ae 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonClientOptionsTest.java @@ -22,6 +22,7 @@ public class PythonClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonTest.java index 07c4bc76b030..d57b445b9c2b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/python/PythonTest.java @@ -11,6 +11,7 @@ import io.swagger.parser.SwaggerParser; import org.testng.Assert; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class PythonTest { @Test(description = "convert a python model with dots") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java index 389721d3841e..1bc1147cd00c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/qtfivecpp/Qt5CPPOptionsTest.java @@ -22,6 +22,7 @@ public class Qt5CPPOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 index 404941619730..f61367e8220e 100644 --- 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 @@ -22,6 +22,7 @@ public class RubyClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaClientOptionsTest.java index 0e916aebd76b..fe0b3b3b5443 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaClientOptionsTest.java @@ -22,6 +22,7 @@ public class ScalaClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaModelTest.java index 81290c473872..e3c12d028fba 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/scala/ScalaModelTest.java @@ -18,6 +18,7 @@ import com.google.common.collect.Sets; import org.testng.Assert; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class ScalaModelTest { @Test(description = "convert a simple scala model") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/scalatra/ScalatraServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/scalatra/ScalatraServerOptionsTest.java index 49bbe4373b6e..70c3dd30987f 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/scalatra/ScalatraServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/scalatra/ScalatraServerOptionsTest.java @@ -22,6 +22,7 @@ public class ScalatraServerOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java index 11681230289a..c32ef13fd82e 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/silex/SilexServerOptionsTest.java @@ -22,6 +22,7 @@ public class SilexServerOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/sinatra/SinatraServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/sinatra/SinatraServerOptionsTest.java index 6691cf27f860..56e81aba251a 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/sinatra/SinatraServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/sinatra/SinatraServerOptionsTest.java @@ -22,6 +22,7 @@ public class SinatraServerOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/slim/SlimFrameworkServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/slim/SlimFrameworkServerOptionsTest.java index 51c668bd931a..554f4ca0db54 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/slim/SlimFrameworkServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/slim/SlimFrameworkServerOptionsTest.java @@ -22,6 +22,7 @@ public class SlimFrameworkServerOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/springmvc/SpringMVCServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/springmvc/SpringMVCServerOptionsTest.java index d4b984ffcd27..c24162c1a3c9 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/springmvc/SpringMVCServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/springmvc/SpringMVCServerOptionsTest.java @@ -22,6 +22,7 @@ public class SpringMVCServerOptionsTest extends JavaClientOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java index bc2da143efbc..9f9f6da27a1c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticDocOptionsTest.java @@ -22,6 +22,7 @@ public class StaticDocOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticOperationTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticOperationTest.java index f3e08e805417..6b16b3b7f5b8 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticOperationTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/staticDocs/StaticOperationTest.java @@ -10,6 +10,7 @@ import io.swagger.models.properties.StringProperty; import org.testng.Assert; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class StaticOperationTest { @Test(description = "convert a string parameter") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java index befe62e32c42..91ba418fb916 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/statichtml/StaticHtmlOptionsTest.java @@ -22,6 +22,7 @@ public class StaticHtmlOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java index f2f461f2b703..ba142d314e97 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swagger/SwaggerOptionsTest.java @@ -22,6 +22,7 @@ public class SwaggerOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java index a1478a8ba058..0ed24654f0ac 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swaggeryaml/SwaggerYamlOptionsTest.java @@ -22,6 +22,7 @@ public class SwaggerYamlOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java index 7d3504f67de4..7b8ccb616320 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift/SwiftOptionsTest.java @@ -22,6 +22,7 @@ public class SwiftOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java index 83ebb8be15ef..35262568fa59 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/tizen/TizenClientOptionsTest.java @@ -22,6 +22,7 @@ public class TizenClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java index 3fdf817dc58e..df57cec4b705 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularClientOptionsTest.java @@ -22,6 +22,7 @@ public class TypeScriptAngularClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularModelTest.java index 55bbbeffdba4..78b14f50e876 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptangular/TypeScriptAngularModelTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Sets; import org.testng.Assert; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class TypeScriptAngularModelTest { @Test(description = "convert a simple TypeScript Angular model") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java index 2374011b1b9d..51fa87c35d21 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeClientOptionsTest.java @@ -22,6 +22,7 @@ public class TypeScriptNodeClientOptionsTest extends AbstractOptionsTest { return clientCodegen; } + @SuppressWarnings("unused") @Override protected void setExpectations() { new Expectations(clientCodegen) {{ 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 995fc8c80e7d..c0af8dc56c92 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 @@ -19,7 +19,6 @@ package io.swagger.generator; import org.apache.commons.io.IOUtils; import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import java.io.IOException; @@ -30,8 +29,6 @@ public class Bootstrap extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { - ServletContext context = config.getServletContext(); - DynamicSwaggerConfig bc = new DynamicSwaggerConfig(); bc.setBasePath("/api"); bc.setTitle("Swagger Generator"); diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/exception/ApiException.java b/modules/swagger-generator/src/main/java/io/swagger/generator/exception/ApiException.java index 4ffc2348c27a..11932b262953 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/exception/ApiException.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/exception/ApiException.java @@ -24,4 +24,9 @@ public class ApiException extends Exception { super(msg); this.code = code; } + + public int getCode() + { + return code; + } } diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/exception/BadRequestException.java b/modules/swagger-generator/src/main/java/io/swagger/generator/exception/BadRequestException.java index 14093f536d2e..2adf97b8bf46 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/exception/BadRequestException.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/exception/BadRequestException.java @@ -16,12 +16,12 @@ package io.swagger.generator.exception; +import org.apache.http.HttpStatus; + public class BadRequestException extends ApiException { private static final long serialVersionUID = -5540416398447252055L; - private int code; - public BadRequestException(int code, String msg) { - super(code, msg); - this.code = code; + public BadRequestException(String msg) { + super(HttpStatus.SC_BAD_REQUEST, msg); } } diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/exception/NotFoundException.java b/modules/swagger-generator/src/main/java/io/swagger/generator/exception/NotFoundException.java index cdae50ce9b65..d3747be7d9a8 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/exception/NotFoundException.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/exception/NotFoundException.java @@ -16,12 +16,12 @@ package io.swagger.generator.exception; +import org.apache.http.HttpStatus; + public class NotFoundException extends ApiException { private static final long serialVersionUID = -1223255119112336573L; - private int code; - public NotFoundException(int code, String msg) { - super(code, msg); - this.code = code; + public NotFoundException(String msg) { + super(HttpStatus.SC_NOT_FOUND, msg); } } 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 9946831640d4..c04ea9200890 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 @@ -34,7 +34,7 @@ public class Generator { try { config = CodegenConfigLoader.forName(language); } catch (Exception e) { - throw new BadRequestException(400, String.format("Unsupported target %s supplied. %s", language, e)); + throw new BadRequestException(String.format("Unsupported target %s supplied. %s", language, e)); } Map map = new LinkedHashMap(); for (CliOption option : config.cliOptions()) { @@ -69,7 +69,7 @@ public class Generator { 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"); + throw new BadRequestException("No options were supplied"); } JsonNode node = opts.getSpec(); if(node != null && "{}".equals(node.toString())) { @@ -81,13 +81,13 @@ public class Generator { if (opts.getSwaggerUrl() != null) { swagger = new SwaggerParser().read(opts.getSwaggerUrl()); } else { - throw new BadRequestException(400, "No swagger specification was supplied"); + throw new BadRequestException("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"); + throw new BadRequestException("The swagger specification supplied was not valid"); } ClientOptInput clientOptInput = new ClientOptInput(); @@ -104,7 +104,7 @@ public class Generator { try { codegenConfig = CodegenConfigLoader.forName(language); } catch(RuntimeException e) { - throw new BadRequestException(400, "Unsupported target " + language + " supplied"); + throw new BadRequestException("Unsupported target " + language + " supplied"); } if (opts.getOptions() != null) { @@ -127,7 +127,7 @@ public class Generator { ZipUtil zip = new ZipUtil(); zip.compressFiles(filesToAdd, outputFilename); } else { - throw new BadRequestException(400, "A target generation was attempted, but no files were created!"); + throw new BadRequestException("A target generation was attempted, but no files were created!"); } for(File file: files) { try { @@ -144,16 +144,16 @@ public class Generator { LOGGER.error("unable to delete output folder " + outputFolder); } } catch (Exception e) { - throw new BadRequestException(500, "Unable to build target: " + e.getMessage()); + throw new BadRequestException("Unable to build target: " + e.getMessage()); } return outputFilename; } - public static InputOption clientOptions(String language) { + public static InputOption clientOptions(@SuppressWarnings("unused") String language) { return null; } - public static InputOption serverOptions(String language) { + public static InputOption serverOptions(@SuppressWarnings("unused") String language) { return null; } 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 343692f8385e..53d5d8a72a6d 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 @@ -24,6 +24,7 @@ import java.util.*; @Path("/gen") @Api(value = "/gen", description = "Resource for generating swagger components") +@SuppressWarnings("static-method") public class SwaggerResource { static List clients = new ArrayList(); static List servers = new ArrayList(); @@ -110,7 +111,7 @@ public class SwaggerResource { responseContainer = "map", tags = "clients") public Response getClientOptions( - @Context HttpServletRequest request, + @SuppressWarnings("unused") @Context HttpServletRequest request, @ApiParam(value = "The target language for the client library", required = true) @PathParam("language") String language) throws Exception { @@ -132,7 +133,7 @@ public class SwaggerResource { responseContainer = "map", tags = "servers") public Response getServerOptions( - @Context HttpServletRequest request, + @SuppressWarnings("unused") @Context HttpServletRequest request, @ApiParam(value = "The target language for the server framework", required = true) @PathParam("framework") String framework) throws Exception { @@ -181,7 +182,7 @@ public class SwaggerResource { @ApiParam(value = "parameters", required = true) GeneratorInput opts) throws Exception { if (framework == null) { - throw new BadRequestException(400, "Framework is required"); + throw new BadRequestException("Framework is required"); } String filename = Generator.generateServer(framework, opts); System.out.println("generated name: " + filename); diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/util/ValidationException.java b/modules/swagger-generator/src/main/java/io/swagger/generator/util/ValidationException.java index 22ed4ada8785..631541f6c012 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/util/ValidationException.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/util/ValidationException.java @@ -1,12 +1,9 @@ package io.swagger.generator.util; -import java.util.List; - public class ValidationException extends Exception { private static final long serialVersionUID = 6861195361018260380L; private int code; private String msg; - private List errors; public ValidationException(String msg) { super(msg); diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/GeneratorInputTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/GeneratorInputTest.java index c5cc99461f30..6b6b22fd6756 100644 --- a/modules/swagger-generator/src/test/java/io/swagger/generator/GeneratorInputTest.java +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/GeneratorInputTest.java @@ -4,6 +4,7 @@ import io.swagger.generator.model.GeneratorInput; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class GeneratorInputTest { @Test(description = "write an object") diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java index 55161327b1ce..ca5ea43412fa 100644 --- a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java @@ -2,8 +2,6 @@ package io.swagger.generator.online; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; -import static org.testng.Assert.assertNotNull; - import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfigLoader; import io.swagger.codegen.options.AkkaScalaClientOptionsProvider; @@ -43,7 +41,6 @@ import io.swagger.generator.model.GeneratorInput; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Function; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.io.FileUtils; @@ -67,7 +64,7 @@ public class OnlineGeneratorOptionsTest { private static final String OPTIONS_PROVIDER = "optionsProvider"; @DataProvider(name = OPTIONS_PROVIDER) - private Object[][] listOptions() { + private static Object[][] listOptions() { return new Object[][]{{new AkkaScalaClientOptionsProvider()}, {new AndroidClientOptionsProvider()}, {new AsyncScalaClientOptionsProvider()}, {new CSharpClientOptionsProvider()}, {new CsharpDotNet2ClientOptionsProvider()}, {new DartClientOptionsProvider()}, @@ -122,7 +119,7 @@ public class OnlineGeneratorOptionsTest { } } - private HashMap convertOptions(OptionsProvider provider) { + private static HashMap convertOptions(OptionsProvider provider) { HashMap options = new HashMap(); for (Map.Entry entry : provider.createOptions().entrySet()) { options.put(entry.getKey(), new InvocationCounter(entry.getValue())); @@ -159,7 +156,7 @@ public class OnlineGeneratorOptionsTest { } @Test(dataProvider = OPTIONS_PROVIDER) - public void getOptionsTest(OptionsProvider provider) throws ApiException { + public static void getOptionsTest(OptionsProvider provider) throws ApiException { final Map opts = Generator.getOptions(provider.getLanguage()); final Function cliOptionWrapper = new Function() { 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 index 93277a6a2f97..bca63e37eedf 100644 --- 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 @@ -13,6 +13,7 @@ import org.testng.annotations.Test; import java.util.Map; +@SuppressWarnings("static-method") public class OnlineJavaClientOptionsTest { @Test From b292ce54ce66559ddeace0b9820d3bcb123d177e Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Mon, 18 Jan 2016 10:10:55 +0100 Subject: [PATCH 13/76] Update after merging --- .../codegen/languages/JaxRSServerCodegen.java | 37 ++----------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index 8ef4056ee5aa..f681bf5ba96e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -9,11 +9,9 @@ import java.io.File; import java.util.*; public class JaxRSServerCodegen extends JavaClientCodegen { - protected String dateLibrary = "default"; protected String title = "Swagger Server"; protected String implFolder = "src/main/java"; - public static final String DATE_LIBRARY = "dateLibrary"; public JaxRSServerCodegen() { super(); @@ -41,14 +39,6 @@ public class JaxRSServerCodegen extends JavaClientCodegen { } } - CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use"); - Map dateOptions = new HashMap(); - dateOptions.put("java8", "Java 8 native"); - dateOptions.put("joda", "Joda"); - dateLibrary.setEnum(dateOptions); - - cliOptions.add(dateLibrary); - CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); library.setDefault(DEFAULT_LIBRARY); @@ -84,11 +74,7 @@ public class JaxRSServerCodegen extends JavaClientCodegen { if(additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER)) { implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); } - -// if("jersey2".equals(getLibrary())) { -// embeddedTemplateDir = templateDir = "JavaJaxRS" + File.separator + "jersey2"; -// } - + supportingFiles.clear(); supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); @@ -111,25 +97,12 @@ public class JaxRSServerCodegen extends JavaClientCodegen { } if("joda".equals(dateLibrary)) { - typeMapping.put("date", "LocalDate"); - typeMapping.put("DateTime", "DateTime"); - - importMapping.put("LocalDate", "org.joda.time.LocalDate"); - importMapping.put("DateTime", "org.joda.time.DateTime"); - supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); } else if ("java8".equals(dateLibrary)) { - additionalProperties.put("java8", "true"); - additionalProperties.put("javaVersion", "1.8"); - typeMapping.put("date", "LocalDate"); - typeMapping.put("DateTime", "LocalDateTime"); - importMapping.put("LocalDate", "java.time.LocalDate"); - importMapping.put("LocalDateTime", "java.time.LocalDateTime"); - supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", @@ -180,7 +153,7 @@ public class JaxRSServerCodegen extends JavaClientCodegen { } } this.additionalProperties.put("serverPort", port); - if( swagger.getPaths() != null) { + if(swagger.getPaths() != null) { for(String pathname : swagger.getPaths().keySet()) { Path path = swagger.getPath(pathname); if(path.getOperations() != null) { @@ -256,7 +229,7 @@ public class JaxRSServerCodegen extends JavaClientCodegen { if (name.length() == 0) { return "DefaultApi"; } - name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + name = sanitizeName(name); return camelize(name) + "Api"; } @@ -291,8 +264,4 @@ public class JaxRSServerCodegen extends JavaClientCodegen { public boolean shouldOverwrite(String filename) { return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); } - - public void setDateLibrary(String library) { - this.dateLibrary = library; - } } From 89ed3bdb755fafe82604655386cb940fcc97bc77 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Mon, 18 Jan 2016 11:16:04 +0100 Subject: [PATCH 14/76] New fix --- modules/swagger-codegen/pom.xml | 6 +++--- .../java/io/swagger/codegen/DefaultGenerator.java | 11 +++-------- .../swagger/codegen/examples/XmlExampleGenerator.java | 2 +- .../languages/AbstractTypeScriptClientCodegen.java | 9 +++++---- .../codegen/languages/CSharpClientCodegen.java | 2 +- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 29d2dc4e1484..a5c4eedd7406 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -101,7 +101,7 @@ org.apache.maven.plugins maven-release-plugin - 2.1 + org.apache.maven.plugins @@ -256,7 +256,7 @@ org.testng testng - ${testng-version} + test @@ -268,7 +268,7 @@ org.jmockit jmockit - ${jmockit-version} + test 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 6943057f558f..62567a2781cd 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 @@ -19,7 +19,7 @@ import static org.apache.commons.lang3.StringUtils.capitalize; import static org.apache.commons.lang3.StringUtils.isNotEmpty; public class DefaultGenerator extends AbstractGenerator implements Generator { - Logger LOGGER = LoggerFactory.getLogger(DefaultGenerator.class); + protected Logger LOGGER = LoggerFactory.getLogger(DefaultGenerator.class); protected CodegenConfig config; protected ClientOptInput opts; @@ -392,16 +392,11 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } File outputFile = new File(outputFilename); OutputStream out = new FileOutputStream(outputFile, false); - if (in != null && out != null) { + if (in != 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"); - } + System.out.println("can't open " + templateFile + " for input"); // FIXME: use LOGGER instead of standart output } files.add(outputFile); } 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 bf4896ac5d8d..ec77888ec25b 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 @@ -39,7 +39,7 @@ public class XmlExampleGenerator { public XmlExampleGenerator(Map examples) { this.examples = examples; if (examples == null) { - examples = new HashMap(); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + this.examples = new HashMap(); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index d57783080a6c..9b3f5ee48ca6 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -9,10 +9,6 @@ import java.io.File; import org.apache.commons.lang.StringUtils; public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen implements CodegenConfig { - @Override - public CodegenType getTag() { - return CodegenType.CLIENT; - } public AbstractTypeScriptClientCodegen() { super(); @@ -56,6 +52,11 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp // mapped to String as a workaround typeMapping.put("binary", "string"); } + + @Override + public CodegenType getTag() { + return CodegenType.CLIENT; + } @Override public String escapeReservedWord(String name) { 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 0ab69bd54332..55a4abbf4173 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 @@ -22,7 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { - @SuppressWarnings("unused") + @SuppressWarnings({ "unused", "hiding" }) private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); protected boolean optionalAssemblyInfoFlag = true; protected boolean optionalMethodArgumentFlag = true; From 370a8d136fd0c86eb3b47f0303a793b74b52d162 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Mon, 18 Jan 2016 11:35:57 +0100 Subject: [PATCH 15/76] fixes --- modules/swagger-codegen-cli/pom.xml | 4 ++-- .../io/swagger/codegen/cmd/utils/OptionUtilsTest.java | 3 ++- modules/swagger-codegen-maven-plugin/pom.xml | 2 +- .../test/java/io/swagger/codegen/AbstractOptionsTest.java | 3 ++- .../test/java/io/swagger/codegen/ClientAuthInputTest.java | 1 + .../java/io/swagger/codegen/CodegenConfigLoaderTest.java | 1 + .../src/test/java/io/swagger/codegen/CodegenTest.java | 2 +- .../java/io/swagger/codegen/DefaultGeneratorTest.java | 4 ++-- .../java/io/swagger/codegen/ExampleGeneratorTest.java | 1 + .../java/io/swagger/codegen/InlineModelResolverTest.java | 1 + .../test/java/io/swagger/codegen/SwaggerMigratorTest.java | 1 + .../swagger/codegen/config/CodegenConfiguratorTest.java | 8 ++++++-- .../io/swagger/codegen/flash/FlashClienOptionsTest.java | 2 -- .../codegen/typescriptnode/TypeScriptNodeModelTest.java | 1 + .../src/main/java/io/swagger/generator/util/ZipUtil.java | 4 +--- .../generator/online/OnlineGeneratorOptionsTest.java | 6 +++--- 16 files changed, 26 insertions(+), 18 deletions(-) diff --git a/modules/swagger-codegen-cli/pom.xml b/modules/swagger-codegen-cli/pom.xml index 9100143a2365..c118a6325ef2 100644 --- a/modules/swagger-codegen-cli/pom.xml +++ b/modules/swagger-codegen-cli/pom.xml @@ -89,13 +89,13 @@ org.testng testng - ${testng-version} + test org.jmockit jmockit - ${jmockit-version} + test diff --git a/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java b/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java index 650f05d58e60..480631c913cd 100644 --- a/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java +++ b/modules/swagger-codegen-cli/src/test/java/io/swagger/codegen/cmd/utils/OptionUtilsTest.java @@ -10,6 +10,7 @@ import java.util.List; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +@SuppressWarnings("static-method") public class OptionUtilsTest { @Test @@ -30,7 +31,7 @@ public class OptionUtilsTest { doTupleListTest(null, new ArrayList>()); } - private void doTupleListTest(String input, List> expectedResults) { + private static void doTupleListTest(String input, List> expectedResults) { final List> result = OptionUtils.parseCommaSeparatedTuples(input); assertNotNull(result); assertEquals(result.size(), expectedResults.size()); diff --git a/modules/swagger-codegen-maven-plugin/pom.xml b/modules/swagger-codegen-maven-plugin/pom.xml index 850ac7355347..52cf252d3094 100644 --- a/modules/swagger-codegen-maven-plugin/pom.xml +++ b/modules/swagger-codegen-maven-plugin/pom.xml @@ -51,7 +51,7 @@ junit junit - 4.12 + test 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 index 002e4ba8f299..ede3feb50b48 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/AbstractOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/AbstractOptionsTest.java @@ -22,6 +22,7 @@ public abstract class AbstractOptionsTest { this.optionsProvider = optionsProvider; } + @SuppressWarnings("unused") @Test public void checkOptionsProcessing() { getCodegenConfig().additionalProperties().putAll(optionsProvider.createOptions()); @@ -49,7 +50,7 @@ public abstract class AbstractOptionsTest { } } - private Function getCliOptionTransformer() { + private static Function getCliOptionTransformer() { return new Function() { @Override public String apply(CliOption option) { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ClientAuthInputTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ClientAuthInputTest.java index 59552bba1486..490affe0764e 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ClientAuthInputTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ClientAuthInputTest.java @@ -7,6 +7,7 @@ import org.testng.annotations.Test; import java.util.List; +@SuppressWarnings("static-method") public class ClientAuthInputTest { @Test(description = "read a file upload param from a 2.0 spec") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenConfigLoaderTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenConfigLoaderTest.java index b91e506a4f96..cf4e4a201fb5 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenConfigLoaderTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenConfigLoaderTest.java @@ -11,6 +11,7 @@ import java.util.Set; import static org.testng.Assert.assertEquals; +@SuppressWarnings("static-method") public class CodegenConfigLoaderTest { @DataProvider(name = "codegenConfig") 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 68c2b4b170bf..91a1240ced8e 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 @@ -189,7 +189,7 @@ public class CodegenTest { } - private Swagger parseAndPrepareSwagger(String path) { + private static Swagger parseAndPrepareSwagger(String path) { Swagger swagger = new SwaggerParser().read(path); // resolve inline models new InlineModelResolver().flatten(swagger); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java index ed83c89c8f04..8cd04c932f96 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java @@ -200,13 +200,13 @@ public class DefaultGeneratorTest { } } - private void changeContent(File file) throws IOException { + private static void changeContent(File file) throws IOException { Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), UTF_8)); out.write(TEST_SKIP_OVERWRITE); out.close(); } - private CodegenOperation findCodegenOperationByOperationId(Map> paths, String operationId) { + private static CodegenOperation findCodegenOperationByOperationId(Map> paths, String operationId) { for (List ops : paths.values()) { for (CodegenOperation co : ops) { if (operationId.equals(co.operationId)) { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java index 339b77badbd4..d4c22b88aade 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/ExampleGeneratorTest.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +@SuppressWarnings("static-method") public class ExampleGeneratorTest { @Test(description = "check handling of recursive models") 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 f972711138b6..9102f06908f1 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 @@ -12,6 +12,7 @@ import java.util.Map; import static org.testng.AssertJUnit.*; +@SuppressWarnings("static-method") public class InlineModelResolverTest { @Test public void resolveInlineModelTest() throws Exception { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/SwaggerMigratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/SwaggerMigratorTest.java index 2a7e9ec532a5..cf19c2058c47 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/SwaggerMigratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/SwaggerMigratorTest.java @@ -5,6 +5,7 @@ import io.swagger.parser.SwaggerParser; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class SwaggerMigratorTest { @Test(description = "read a 1.2 spec") diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java index 8108d206f3a3..6f39eb1af99b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/config/CodegenConfiguratorTest.java @@ -25,6 +25,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; +@SuppressWarnings("static-method") public class CodegenConfiguratorTest { @Mocked @@ -76,6 +77,7 @@ public class CodegenConfiguratorTest { assertValueInMap(clientOptInput.getConfig().additionalProperties(), CodegenConstants.TEMPLATE_DIR, toAbsolutePathDir(templateDir)); } + @SuppressWarnings("unused") @Test public void testSystemProperties() throws Exception { @@ -287,6 +289,7 @@ public class CodegenConfiguratorTest { assertValueInMap(configurator.getDynamicProperties(), CodegenConstants.LOCAL_VARIABLE_PREFIX, "_"); } + @SuppressWarnings("unused") private ClientOptInput setupAndRunGenericTest(CodegenConfigurator configurator) { final String spec = "swagger.yaml"; @@ -316,10 +319,11 @@ public class CodegenConfiguratorTest { return result; } - private String toAbsolutePathDir(String outputDir) { + private static String toAbsolutePathDir(String outputDir) { return Paths.get(outputDir).toAbsolutePath().toAbsolutePath().toString(); } + @SuppressWarnings("unused") private void setupStandardExpectations(final String spec, final String languageName, final String auth, final CodegenConfig config) { new StrictExpectations() {{ @@ -340,7 +344,7 @@ public class CodegenConfiguratorTest { }}; } - private void assertValueInMap(Map map, String propertyKey, String expectedPropertyValue) { + private static void assertValueInMap(Map map, String propertyKey, String expectedPropertyValue) { assertTrue(map.containsKey(propertyKey)); assertEquals(map.get(propertyKey), expectedPropertyValue); } 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 index 97f4036c4d96..d3debf295792 100644 --- 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 @@ -8,8 +8,6 @@ import io.swagger.codegen.options.FlashClienOptionsProvider; import mockit.Expectations; import mockit.Tested; -import java.util.Map; - public class FlashClienOptionsTest extends AbstractOptionsTest { @Tested diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeModelTest.java index a932ac2b5aea..95398b155cf2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/typescriptnode/TypeScriptNodeModelTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Sets; import org.testng.Assert; import org.testng.annotations.Test; +@SuppressWarnings("static-method") public class TypeScriptNodeModelTest { @Test(description = "convert a simple TypeScript Node model") diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/util/ZipUtil.java b/modules/swagger-generator/src/main/java/io/swagger/generator/util/ZipUtil.java index c63f161b7020..3295be5d8980 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/util/ZipUtil.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/util/ZipUtil.java @@ -103,20 +103,18 @@ public class ZipUtil { * @throws FileNotFoundException * @throws IOException */ - private void addFileToZip(File file, ZipOutputStream zos) + private static void addFileToZip(File file, ZipOutputStream zos) throws FileNotFoundException, IOException { zos.putNextEntry(new ZipEntry(file.getName())); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); - long bytesRead = 0; byte[] bytesIn = new byte[BUFFER_SIZE]; int read = 0; while ((read = bis.read(bytesIn)) != -1) { zos.write(bytesIn, 0, read); - bytesRead += read; } zos.closeEntry(); diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java index ca5ea43412fa..626255519bf7 100644 --- a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java @@ -159,7 +159,7 @@ public class OnlineGeneratorOptionsTest { public static void getOptionsTest(OptionsProvider provider) throws ApiException { final Map opts = Generator.getOptions(provider.getLanguage()); - final Function cliOptionWrapper = new Function() { + final Function cliOptionWrapper = new Function() { @Nullable @Override public CliOptionProxy apply(@Nullable CliOption option) { @@ -167,13 +167,13 @@ public class OnlineGeneratorOptionsTest { } }; - final List actual = Lists.transform(new ArrayList(opts.values()), cliOptionWrapper); + final List actual = Lists.transform(new ArrayList(opts.values()), cliOptionWrapper); final List expected = Lists.transform( CodegenConfigLoader.forName(provider.getLanguage()).cliOptions(), cliOptionWrapper); assertEquals(actual, expected); } - private static class CliOptionProxy { + protected static class CliOptionProxy { private final CliOption wrapped; public CliOptionProxy(CliOption wrapped){ From 6e69d4e0074c7bdebed1c35f6d8c7beb6eb91081 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Fri, 15 Jan 2016 16:49:36 +0100 Subject: [PATCH 16/76] Corrent issue 1885 Handle the Swagger "default" value for a parameter with the JAX-RS @DefaultValue annotation. This correction will also be reported in the new JAX-RS CXF Codegen. --- .../main/resources/JavaJaxRS/jersey1_18/queryParams.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache index 342da154a877..168233d222e5 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache @@ -1 +1 @@ -{{#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 +{{#isQueryParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @DefaultValue("{{defaultValue}}") @QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file From 06ac073740c6a4b1ed4da79be8a5859637ac5576 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 15 Jan 2016 09:35:41 -0800 Subject: [PATCH 17/76] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e267217ebd01..f44085cfe031 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Swagger Codegen Version | Release Date | OpenAPI Spec compatibility | Notes ### Prerequisites -If you're looking for the latest stable version, you can grab it directly from maven central (you'll need the java 7 runtime): +If you're looking for the latest stable version, you can grab it directly from maven central (you'll need java 7 runtime at a minimum): ``` wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.1.4/swagger-codegen-cli-2.1.4.jar swagger-codegen-cli.jar From a39a89521fa51fb599830e4cf76340c33df8ad7d Mon Sep 17 00:00:00 2001 From: Ole Lensmar Date: Fri, 15 Jan 2016 14:02:35 -0500 Subject: [PATCH 18/76] fixed cmdline class in custom template examples --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f44085cfe031..9bd5fdb01fe2 100644 --- a/README.md +++ b/README.md @@ -237,16 +237,15 @@ This will write, in the folder `output/myLibrary`, all the files you need to get You would then compile your library in the `output/myLibrary` folder with `mvn package` and execute the codegen like such: - ``` -java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.Codegen +java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen ``` Note the `myClientCodegen` is an option now, and you can use the usual arguments for generating your library: ``` java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \ - io.swagger.codegen.Codegen generate -l myClientCodegen\ + io.swagger.codegen.SwaggerCodegen generate -l myClientCodegen\ -i http://petstore.swagger.io/v2/swagger.json \ -o myClient ``` From 09e32bb959507c3dbcbe4a70d43321e5c7531aa2 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 15 Jan 2016 14:20:20 -0800 Subject: [PATCH 19/76] added date library option --- .../codegen/languages/JavaClientCodegen.java | 40 +++++++++++++++++++ .../codegen/languages/JaxRSServerCodegen.java | 40 ------------------- .../codegen/options/JavaOptionsProvider.java | 1 + .../options/JaxRSServerOptionsProvider.java | 4 +- 4 files changed, 42 insertions(+), 43 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 8a09eb34ea9b..5ad20c0e230e 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 @@ -20,7 +20,9 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(JavaClientCodegen.class); public static final String FULL_JAVA_UTIL = "fullJavaUtil"; public static final String DEFAULT_LIBRARY = ""; + public static final String DATE_LIBRARY = "dateLibrary"; + protected String dateLibrary = "default"; protected String invokerPackage = "io.swagger.client"; protected String groupId = "io.swagger"; protected String artifactId = "swagger-java-client"; @@ -97,6 +99,14 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { library.setEnum(supportedLibraries); library.setDefault(DEFAULT_LIBRARY); cliOptions.add(library); + + CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use"); + Map dateOptions = new HashMap(); + dateOptions.put("java8", "Java 8 native"); + dateOptions.put("joda", "Joda"); + dateLibrary.setEnum(dateOptions); + + cliOptions.add(dateLibrary); } @Override @@ -252,6 +262,32 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { } else if("jersey2".equals(getLibrary())) { supportingFiles.add(new SupportingFile("JSON.mustache", invokerFolder, "JSON.java")); } + + if("joda".equals(dateLibrary)) { + typeMapping.put("date", "LocalDate"); + typeMapping.put("DateTime", "DateTime"); + + importMapping.put("LocalDate", "org.joda.time.LocalDate"); + importMapping.put("DateTime", "org.joda.time.DateTime"); + + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); + } + else if ("java8".equals(dateLibrary)) { + additionalProperties.put("java8", "true"); + additionalProperties.put("javaVersion", "1.8"); + typeMapping.put("date", "LocalDate"); + typeMapping.put("DateTime", "LocalDateTime"); + importMapping.put("LocalDate", "java.time.LocalDate"); + importMapping.put("LocalDateTime", "java.time.LocalDateTime"); + + supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); + } } private void sanitizeConfig() { @@ -760,4 +796,8 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { public void setFullJavaUtil(boolean fullJavaUtil) { this.fullJavaUtil = fullJavaUtil; } + + public void setDateLibrary(String library) { + this.dateLibrary = library; + } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index 5814751d63c9..e131a7bcbbbe 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -9,11 +9,9 @@ import java.io.File; import java.util.*; public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConfig { - protected String dateLibrary = "default"; protected String title = "Swagger Server"; protected String implFolder = "src/main/java"; - public static final String DATE_LIBRARY = "dateLibrary"; public JaxRSServerCodegen() { super(); @@ -41,14 +39,6 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf } } - CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use"); - Map dateOptions = new HashMap(); - dateOptions.put("java8", "Java 8 native"); - dateOptions.put("joda", "Joda"); - dateLibrary.setEnum(dateOptions); - - cliOptions.add(dateLibrary); - CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); library.setDefault(DEFAULT_LIBRARY); @@ -109,32 +99,6 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf setDateLibrary(additionalProperties.get("dateLibrary").toString()); additionalProperties.put(dateLibrary, "true"); } - - if("joda".equals(dateLibrary)) { - typeMapping.put("date", "LocalDate"); - typeMapping.put("DateTime", "DateTime"); - - importMapping.put("LocalDate", "org.joda.time.LocalDate"); - importMapping.put("DateTime", "org.joda.time.DateTime"); - - supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); - } - else if ("java8".equals(dateLibrary)) { - additionalProperties.put("java8", "true"); - additionalProperties.put("javaVersion", "1.8"); - typeMapping.put("date", "LocalDate"); - typeMapping.put("DateTime", "LocalDateTime"); - importMapping.put("LocalDate", "java.time.LocalDate"); - importMapping.put("LocalDateTime", "java.time.LocalDateTime"); - - supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); - } } @Override @@ -291,8 +255,4 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf public boolean shouldOverwrite(String filename) { return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); } - - public void setDateLibrary(String library) { - this.dateLibrary = library; - } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java index 7e5fd36793a8..32490ba659b1 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java @@ -39,6 +39,7 @@ public class JavaOptionsProvider implements OptionsProvider { .put(JavaClientCodegen.FULL_JAVA_UTIL, FULL_JAVA_UTIL_VALUE) .put(CodegenConstants.LIBRARY, LIBRARY_VALUE) .put(CodegenConstants.SERIALIZE_BIG_DECIMAL_AS_STRING, "true") + .put(JavaClientCodegen.DATE_LIBRARY, "joda") .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java index e72860945645..b74623e85175 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java @@ -1,7 +1,6 @@ package io.swagger.codegen.options; import com.google.common.collect.ImmutableMap; -import io.swagger.codegen.languages.JaxRSServerCodegen; import io.swagger.codegen.CodegenConstants; import java.util.Map; @@ -26,8 +25,7 @@ public class JaxRSServerOptionsProvider extends JavaOptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); builder.putAll(options) - .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE) - .put(JaxRSServerCodegen.DATE_LIBRARY, "joda"); + .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE); return builder.build(); } From 835da98582a01570ce57615a4a6076e9ebd01346 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 15 Jan 2016 14:28:55 -0800 Subject: [PATCH 20/76] fixed templates --- .../codegen/languages/JavaClientCodegen.java | 14 ++++---------- .../codegen/languages/JaxRSServerCodegen.java | 13 +++++++++++++ 2 files changed, 17 insertions(+), 10 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 5ad20c0e230e..a005b1f3e26d 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 @@ -263,17 +263,16 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("JSON.mustache", invokerFolder, "JSON.java")); } + if(additionalProperties.containsKey(DATE_LIBRARY)) { + this.dateLibrary = additionalProperties.get(DATE_LIBRARY).toString(); + } + if("joda".equals(dateLibrary)) { typeMapping.put("date", "LocalDate"); typeMapping.put("DateTime", "DateTime"); importMapping.put("LocalDate", "org.joda.time.LocalDate"); importMapping.put("DateTime", "org.joda.time.DateTime"); - - supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); } else if ("java8".equals(dateLibrary)) { additionalProperties.put("java8", "true"); @@ -282,11 +281,6 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("DateTime", "LocalDateTime"); importMapping.put("LocalDate", "java.time.LocalDate"); importMapping.put("LocalDateTime", "java.time.LocalDateTime"); - - supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index e131a7bcbbbe..089022ecd33d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -99,6 +99,19 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf setDateLibrary(additionalProperties.get("dateLibrary").toString()); additionalProperties.put(dateLibrary, "true"); } + + if("joda".equals(dateLibrary)) { + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); + } + else if ("java8".equals(dateLibrary)) { + supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); + } } @Override From f4120893b381b68dc4b94740644e4c9396b04ddc Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 17 Jan 2016 16:04:13 +0800 Subject: [PATCH 21/76] fix null apiclient in .net (windows) --- .gitignore | 3 ++ .../resources/csharp/Configuration.mustache | 4 +-- .../csharp/IO/Swagger/Client/Configuration.cs | 4 +-- .../bin/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 35062 -> 34926 bytes ...ClientTest.csproj.FilesWrittenAbsolute.txt | 27 ++++++------------ .../obj/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index d84a08f7b94c..e337758c9066 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,6 @@ samples/client/petstore/python/.venv/ *.pm~ *.xml~ *.t~ + +samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/ +samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/ diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index 029b38324c0c..a7e5df5179c0 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -38,8 +38,8 @@ namespace {{packageName}}.Client ) { if (apiClient == null) - ApiClient = ApiClient.Default; - else + ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; + else ApiClient = apiClient; Username = username; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index 3df5d02c1160..d321ad5ef82a 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -38,8 +38,8 @@ namespace IO.Swagger.Client ) { if (apiClient == null) - ApiClient = ApiClient.Default; - else + ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; + else ApiClient = apiClient; Username = username; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index f70fa971c5b10d8a8f33600bed509a4cc7e77a6d..10b5d98d5fad634730375b3da0c5a3c58207f3ab 100755 GIT binary patch delta 2138 zcmYk;e@vBC7zgn4<(Kb@L|j)8e`R~Q$$OzO=O2j4*47jmf8Z)hP)GzrpnGqM{4nI@ zCSDB5flykp)*t*)tr>+1GnzP&6}HAwh=?gEzfwqXsAM%d=Q&TayWQ=6_@48g=Q-!y z8I?oxDu?FPeF}H|XRqL?2Eay9gAew~w4eZ?KFRVMAc94z1@Xf#LV*4%M0@MXfET|) zPs7?%8yA~uP({2DL5YvapL_2K5t0xrf3==(ovN^te^QhDkyAl0n6IKm%SeeRb8JN) zYfHrGMO!h$ijDbaX*$9#(>x<7CdEw0Vl81T4_lUjSkBU73dDA7U~P}_NTspzWtNG2 zn^_{mOcb%IWSE7ctVWq-;e?iGj&VC)!yV4r<;Wcfy`qb`BuDN*CF`opvhfjXT4vek zBE2tytoIx{;q9~4#QMnbRYB%XoaiHog;u&$2TAQrw#dPET87igHFI#C6=&^}nq*xI zEfBc~>DR@qu{=@>NZlelxIpYeozBF1OX-V#q1Nvf7b2%3cA=NTF$ZR*#Sh?0&Gavak*h1G9elzNG! zj%g3vB-?MObJ~Ma4sTeOqW9t$Yufr%s);pcjYJpW49jrcm+EAxo!N&$mfD$p7$NEI zi!pJHnxO8B5j3pSZPVEoV--<#FPtUl{Eb37`%*MqSJK^=qDhOoFU1*_>b?}6EY)Ed z23e}XGK`RPG5e8ogPtjD^(O8|B~ibK`_W8N#mslU1@FkCV#;xuq>CxXkQNnFj{7WC zOgY3TEn%oz-~ggn>J~TvlND~e3Pc5xm@8Z!sbp51%xq+{5@lwikhM`}mGHAR%d8T0 zEOoW`@HtD}EIyoKWypDN<40Dm%l1ePFg>ob=0V(LRk(Vj{wC>dt3vX)-Zr&sRmdUf zU8}-jlG?SU&O;dZ{n4)Z@!%%Sqr1e9&|6AA@vh5bJN@WoW;@J9ei)N9R2+9@i)zHP znn>GN%_Q%X9@$R1@`u&{Y38=pIO(}NT7j|ZnYFB?Qg$^ynbzTI3TIi*>!Ejb_A;q% zMk`B?WR;Ls-=mB=tVW`ic!#o7)-h5C>!gwm^S*v)7lnseqogj@!Z=m;f(LqJ5@{RD zLs~xj|K*)pynF(yibl4uj+5+JW-~GDPrbxBQUYs$RK=Pg84vYHJgZ9UU_DNX`|H1A zVgss?s%6{@E_2ji7s+RYM4et#1Fyy5x{w=DM^M9|BPw~x5j1i(ZG0G5i<51e60zdo zg7qz%#Ja+psUM%~-E!Xd%&oT4Z_&8wiDdqtK&_m4eAyV5Agyif7%rl1{sbNd26)%B Mg-_x(>f`7A3q!>$od5s; delta 2120 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%0AORGE4t&wZoe9zoYdv3$s~k#OPB!C^RwD9v&P0 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 literal 35062 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 Mg-_x(>f`7A3q!>$od5s; delta 2120 zcmYk-e@vBC7zgn4<>$L<1k{xqlFser4&E!RIo8O`(dHJ}a%#&I`Q;T1g}6kDKv!OF zUN5AyNtmQ_tvUXn#mokVBbt?ZSL&LjA{8MDA|-?{G!mPg^PH#E-PrDj@A>gO=Y4l> zU4L|4fAroqk&*b6cv!i4%{$-giWDKadGb3X|I`mYeJ9Sg!<{tTZt zztrjJxY=>J)=vLXMM39y#4>X&4rv+76RI8S@HJ~q!m&B)Fvwb%`gc+`W?4&9mz&v$ zyg;i6W8TA$uZL61SeaTPaUte zL=y2zY!s4f zvzF2ay+Z9D5+|MG37gPE;RsGTcbTuD;j$VU5@(#%j$+&->0*j8twqHYBc_iQHB>Rh zaI#j(LN{X(YrV`iV+pIs>NdAvjg;I!XjE8dBnvpStqW!eYFLfdb*TXBfULU|AF^6y zhoxv^eQHgZuj3n5k9A+_97%UyhGF?8%KfPOGKilgZ0^1crlL^Y8_8ar>sQjNf%M%|YqiS?cJMe-YXiq&hKmda$Q$5erAk{vYEbE-fgheOucBhLgAAFw1b?k!okDli7w4OP$O%oG0n-D{=7(6-wP#;ua}n)3dL{qk}3` z-3!-tv|m-y-B-cBrlh;CLW34{UxmXg_3W$A&Qcv#Bg9e-R^vQL7gK|kL$s!_)tgv@ zQlfqlYp|E3iivT(g`8nER2SpJ36d_xhi|p07$2^&R53n`vD7WF15wv$LqpvHI}po? zv)v`478Y~9+bfmMN|Tw56|BWFv$2--yv*uQ!CED=I`~-XYVl(~OWiDfe8gHW=e>jo+1mR9&ewPqD7Ny@HA(cP7j^Z*()U9v{t?z$=XhucbhWmupTZg z@eXAftoKN5tRqS`V(;ihPf@s)b)9sS6`!W+zQXY41PWe0wEI{4y&_#;=R zmaTrItMN Date: Sun, 17 Jan 2016 19:14:11 +0800 Subject: [PATCH 22/76] add binary mapping for code generator --- .../codegen/languages/AbstractTypeScriptClientCodegen.java | 4 +++- .../java/io/swagger/codegen/languages/DartClientCodegen.java | 3 +++ .../io/swagger/codegen/languages/FlashClientCodegen.java | 3 +++ .../java/io/swagger/codegen/languages/PerlClientCodegen.java | 3 +++ .../io/swagger/codegen/languages/PythonClientCodegen.java | 3 +++ .../java/io/swagger/codegen/languages/Qt5CPPGenerator.java | 3 +++ .../io/swagger/codegen/languages/ScalaClientCodegen.java | 3 +++ .../io/swagger/codegen/languages/ScalatraServerCodegen.java | 5 ++++- .../io/swagger/codegen/languages/SilexServerCodegen.java | 3 +++ .../io/swagger/codegen/languages/SinatraServerCodegen.java | 3 +++ .../codegen/languages/SlimFrameworkServerCodegen.java | 3 +++ .../main/java/io/swagger/codegen/languages/SwiftCodegen.java | 3 +++ .../io/swagger/codegen/languages/TizenClientCodegen.java | 3 +++ 13 files changed, 40 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index cdfc01d2f82e..ebc8a0617f09 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -52,7 +52,9 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp typeMapping.put("integer", "number"); typeMapping.put("Map", "any"); typeMapping.put("DateTime", "Date"); - + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); } @Override 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 7d11f2a81838..e936a37f3c09 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 @@ -76,6 +76,9 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("Date", "DateTime"); typeMapping.put("date", "DateTime"); typeMapping.put("File", "MultipartFile"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); cliOptions.add(new CliOption(BROWSER_CLIENT, "Is the client browser based")); cliOptions.add(new CliOption(PUB_NAME, "Name in generated pubspec")); 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 dac3d23b22ac..435e235c6811 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 @@ -63,6 +63,9 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("DateTime", "Date"); typeMapping.put("object", "Object"); typeMapping.put("file", "File"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); importMapping = new HashMap(); importMapping.put("File", "flash.filesystem.File"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index 90fea3f4a9b8..9f287ea08917 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -72,6 +72,9 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("array", "ARRAY"); typeMapping.put("map", "HASH"); typeMapping.put("object", "object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); cliOptions.clear(); cliOptions.add(new CliOption(MODULE_NAME, "Perl module name (convention: CamelCase or Long::Module).").defaultValue("SwaggerClient")); 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 02ce858d0cd4..6bcb9c5d5507 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 @@ -51,6 +51,9 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("DateTime", "datetime"); typeMapping.put("object", "object"); typeMapping.put("file", "file"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "str"); // from https://docs.python.org/release/2.5.4/ref/keywords.html reservedWords = new HashSet( diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java index 18ba3718068e..94cac627e9f8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java @@ -121,6 +121,9 @@ public class Qt5CPPGenerator extends DefaultCodegen implements CodegenConfig { typeMapping.put("map", "QMap"); typeMapping.put("file", "SWGHttpRequestInputFileElement"); typeMapping.put("object", PREFIX + "Object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "QString"); importMapping = new HashMap(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java index 088d7fdaad82..e8f462a41fd8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java @@ -96,6 +96,9 @@ public class ScalaClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("double", "Double"); typeMapping.put("object", "Any"); typeMapping.put("file", "File"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); languageSpecificPrimitives = new HashSet( Arrays.asList( diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java index 5d6da580130d..5a4d5c43ef88 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java @@ -67,6 +67,9 @@ public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConf typeMapping.put("integer", "Int"); typeMapping.put("long", "Long"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); additionalProperties.put("appName", "Swagger Sample"); additionalProperties.put("appName", "Swagger Sample"); @@ -193,4 +196,4 @@ public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConf } return toModelName(type); } -} \ No newline at end of file +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java index 4effb480048e..40dedb0aeae6 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java @@ -81,6 +81,9 @@ public class SilexServerCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("array", "array"); typeMapping.put("list", "array"); typeMapping.put("object", "object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); supportingFiles.add(new SupportingFile("README.mustache", packagePath.replace('/', File.separatorChar), "README.md")); supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java index e478c00341e2..d512f7deb9ee 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java @@ -60,6 +60,9 @@ public class SinatraServerCodegen extends DefaultCodegen implements CodegenConfi typeMapping.put("String", "string"); typeMapping.put("List", "array"); typeMapping.put("map", "map"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); // remove modelPackage and apiPackage added by default cliOptions.clear(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java index ae28493fe7ce..3810c6895ec9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java @@ -83,6 +83,9 @@ public class SlimFrameworkServerCodegen extends DefaultCodegen implements Codege typeMapping.put("array", "array"); typeMapping.put("list", "array"); typeMapping.put("object", "object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); supportingFiles.add(new SupportingFile("README.mustache", packagePath.replace('/', File.separatorChar), "README.md")); supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json")); 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 ddd72e4230b3..1beb9a3b2364 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 @@ -120,6 +120,9 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("double", "Double"); typeMapping.put("object", "String"); typeMapping.put("file", "NSURL"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); importMapping = new HashMap(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java index 83241ddc5e70..d7b7d13f637d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java @@ -76,6 +76,9 @@ public class TizenClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("map", "HashMap"); typeMapping.put("number", "Long"); typeMapping.put("object", PREFIX + "Object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); importMapping = new HashMap(); From 275269e72ae6a745dcac09e2e0b198bba8835b3e Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 17 Jan 2016 19:32:50 +0800 Subject: [PATCH 23/76] fix indent, update perl & python sample --- .gitignore | 1 + .../AbstractTypeScriptClientCodegen.java | 2 +- samples/client/petstore/perl/README.md | 2 +- .../perl/lib/WWW/SwaggerClient/Role.pm | 4 +- samples/client/petstore/perl/t/04_role.t | 2 +- samples/client/petstore/python/.coverage | 2 +- .../petstore/python/dev-requirements.txt.log | 15 ++ .../python/swagger_client/apis/pet_api.py | 155 ++++++++++++++++++ 8 files changed, 177 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index e337758c9066..5146bf49500a 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ samples/client/petstore/perl/deep_module_test/ samples/client/petstore/python/.projectile samples/client/petstore/python/.venv/ +samples/client/petstore/python/dev-requirements.txt.log .settings diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index ebc8a0617f09..4a9c05573052 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -52,7 +52,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp typeMapping.put("integer", "number"); typeMapping.put("Map", "any"); typeMapping.put("DateTime", "Date"); - //TODO binary should be mapped to byte array + //TODO binary should be mapped to byte array // mapped to String as a workaround typeMapping.put("binary", "string"); } diff --git a/samples/client/petstore/perl/README.md b/samples/client/petstore/perl/README.md index f42bbf6eb176..e2685dd24687 100644 --- a/samples/client/petstore/perl/README.md +++ b/samples/client/petstore/perl/README.md @@ -8,7 +8,7 @@ WWW::SwaggerClient::Role - a Moose role for the Swagger Petstore Automatically generated by the Perl Swagger Codegen project: -- Build date: 2016-01-15T15:57:32.150+08:00 +- Build date: 2016-01-17T19:21:19.346+08:00 - Build package: class io.swagger.codegen.languages.PerlClientCodegen - Codegen version: diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm index 07b499ad75e8..cc1e39c66573 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm @@ -37,7 +37,7 @@ has version_info => ( is => 'ro', default => sub { { app_name => 'Swagger Petstore', app_version => '1.0.0', - generated_date => '2016-01-15T15:57:32.150+08:00', + generated_date => '2016-01-17T19:21:19.346+08:00', generator_class => 'class io.swagger.codegen.languages.PerlClientCodegen', } }, documentation => 'Information about the application version and the codegen codebase version' @@ -103,7 +103,7 @@ Automatically generated by the Perl Swagger Codegen project: =over 4 -=item Build date: 2016-01-15T15:57:32.150+08:00 +=item Build date: 2016-01-17T19:21:19.346+08:00 =item Build package: class io.swagger.codegen.languages.PerlClientCodegen diff --git a/samples/client/petstore/perl/t/04_role.t b/samples/client/petstore/perl/t/04_role.t index 73328fa6e629..a5f47ec53c5d 100644 --- a/samples/client/petstore/perl/t/04_role.t +++ b/samples/client/petstore/perl/t/04_role.t @@ -50,7 +50,7 @@ is $get_pet->tags->[0]->id, '11', 'stored and retrieved: got the proper tag id'; # API method docs is_deeply( [sort keys %{$api->pet_api->method_documentation}], - [ 'add_pet', 'delete_pet', 'find_pets_by_status', 'find_pets_by_tags', 'get_pet_by_id', 'update_pet', 'update_pet_with_form', 'upload_file'], + [ 'add_pet', 'add_pet_using_byte_array', 'delete_pet', 'find_pets_by_status', 'find_pets_by_tags', 'get_pet_by_id', 'get_pet_by_id_with_byte_array', 'update_pet', 'update_pet_with_form', 'upload_file'], "Pet API method_documentation has the correct keys"); is $api->pet_api->method_documentation->{get_pet_by_id}->{params}->{pet_id}->{description}, 'ID of pet that needs to be fetched', 'get_pet_by_id parameter pet_id description is correct'; diff --git a/samples/client/petstore/python/.coverage b/samples/client/petstore/python/.coverage index 9921d07556ee..4cd98e43d2cf 100644 --- a/samples/client/petstore/python/.coverage +++ b/samples/client/petstore/python/.coverage @@ -1 +1 @@ -!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [278, 70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 284, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [128, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 172, 141, 173, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 234, 108, 240, 119], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 516, 598, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 560, 562, 564, 565, 566, 265, 568, 569, 345, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 86, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 115, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 669, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 148, 661, 150, 665, 666, 155, 156, 538, 159, 160, 673, 162, 675, 676, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 235, 236, 110, 238, 240, 552, 242, 244, 246, 247, 249, 383, 252, 253, 254, 258, 259, 262, 264, 44, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 48, 475, 112, 298, 300, 301, 302, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 505, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 241, 346, 347, 348, 349, 350, 485, 352, 114, 373, 374, 376, 660, 378, 149, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 323, 404, 407, 408, 409, 297, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 72, 499, 671, 74, 672, 454, 455, 457, 458, 459, 674, 464, 465, 468, 471, 472, 164, 474, 79, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 83, 502, 681, 504, 84, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 20, 68, 69, 71, 72, 79, 82, 83, 85, 87, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 234, 108, 238, 240, 117, 119, 212, 106], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [512, 520, 527, 528, 529, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 550, 40, 42, 44, 560, 49, 52, 568, 570, 571, 572, 573, 574, 575, 577, 68, 69, 74, 75, 76, 78, 79, 81, 82, 84, 86, 93, 98, 100, 104, 105, 106, 109, 110, 111, 113, 114, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 131, 132, 133, 136, 139, 140, 143, 146, 147, 148, 149, 151, 154, 155, 157, 159, 160, 162, 539, 164, 173, 174, 176, 178, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 207, 214, 215, 216, 548, 218, 219, 221, 549, 233, 237, 238, 242, 244, 253, 254, 256, 257, 258, 259, 260, 262, 263, 264, 265, 269, 270, 271, 274, 276, 277, 278, 280, 281, 282, 283, 285, 288, 289, 290, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 334, 335, 339, 340, 341, 342, 343, 347, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 371, 372, 373, 374, 381, 389, 391, 392, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 406, 408, 415, 416, 418, 420, 421, 423, 425, 432, 433, 435, 437, 438, 440, 442, 450, 452, 455, 456, 457, 458, 460, 461, 469, 495, 504, 505, 510], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [128, 132, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8]}} \ No newline at end of file +!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 683, 516, 86, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 560, 562, 564, 565, 566, 265, 568, 569, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 598, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 79, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 148, 661, 150, 665, 666, 155, 156, 538, 159, 160, 673, 162, 675, 164, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 115, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 431, 235, 236, 110, 238, 240, 552, 242, 244, 246, 247, 249, 762, 383, 252, 253, 254, 258, 259, 262, 264, 44, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 48, 297, 298, 300, 301, 302, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 323, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 485, 352, 84, 114, 373, 374, 376, 660, 378, 149, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 404, 407, 408, 409, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 669, 72, 241, 671, 74, 672, 83, 454, 455, 457, 458, 459, 674, 112, 464, 465, 468, 471, 472, 676, 474, 475, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 499, 502, 681, 504, 505, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [128, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [128, 132, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 234, 108, 238, 240, 117, 119, 212, 106], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 172, 141, 173, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 234, 108, 240, 119], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [512, 520, 527, 528, 529, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 550, 40, 42, 44, 560, 49, 52, 568, 570, 571, 572, 573, 574, 575, 577, 68, 69, 74, 75, 76, 78, 79, 81, 82, 84, 86, 93, 98, 100, 104, 105, 106, 109, 110, 111, 113, 114, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 131, 132, 133, 136, 139, 140, 143, 146, 147, 148, 149, 151, 154, 155, 157, 159, 160, 162, 539, 164, 173, 174, 176, 178, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 207, 214, 215, 216, 548, 218, 219, 221, 549, 233, 237, 238, 242, 244, 253, 254, 256, 257, 258, 259, 260, 262, 263, 264, 265, 269, 270, 271, 274, 276, 277, 278, 280, 281, 282, 283, 285, 288, 289, 290, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 334, 335, 339, 340, 341, 342, 343, 347, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 371, 372, 373, 374, 381, 389, 391, 392, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 406, 408, 415, 416, 418, 420, 421, 423, 425, 432, 433, 435, 437, 438, 440, 442, 450, 452, 455, 456, 457, 458, 460, 461, 469, 495, 504, 505, 510], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 20, 68, 69, 71, 72, 79, 82, 83, 85, 87, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [278, 70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 284, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251]}} \ No newline at end of file diff --git a/samples/client/petstore/python/dev-requirements.txt.log b/samples/client/petstore/python/dev-requirements.txt.log index 28a3909b9e45..3418ab244d81 100644 --- a/samples/client/petstore/python/dev-requirements.txt.log +++ b/samples/client/petstore/python/dev-requirements.txt.log @@ -146,3 +146,18 @@ Requirement already satisfied (use --upgrade to upgrade): randomize in /private/ Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in /private/var/tmp/pr/Tengah/swagger-codegen/samples/client/petstore/python/venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in /private/var/tmp/pr/Tengah/swagger-codegen/samples/client/petstore/python/venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in /private/var/tmp/pr/Tengah/swagger-codegen/samples/client/petstore/python/venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Collecting nose (from -r dev-requirements.txt (line 1)) + Using cached nose-1.3.7-py2-none-any.whl +Collecting tox (from -r dev-requirements.txt (line 2)) + Using cached tox-2.3.1-py2.py3-none-any.whl +Collecting coverage (from -r dev-requirements.txt (line 3)) +Collecting randomize (from -r dev-requirements.txt (line 4)) + Using cached randomize-0.13-py2.py3-none-any.whl +Collecting virtualenv>=1.11.2 (from tox->-r dev-requirements.txt (line 2)) + Using cached virtualenv-13.1.2-py2.py3-none-any.whl +Collecting py>=1.4.17 (from tox->-r dev-requirements.txt (line 2)) + Using cached py-1.4.31-py2.py3-none-any.whl +Collecting pluggy<0.4.0,>=0.3.0 (from tox->-r dev-requirements.txt (line 2)) + Using cached pluggy-0.3.1-py2.py3-none-any.whl +Installing collected packages: nose, virtualenv, py, pluggy, tox, coverage, randomize +Successfully installed coverage-4.0.3 nose-1.3.7 pluggy-0.3.1 py-1.4.31 randomize-0.13 tox-2.3.1 virtualenv-13.1.2 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 8e50474658c6..c3171760ddf7 100644 --- a/samples/client/petstore/python/swagger_client/apis/pet_api.py +++ b/samples/client/petstore/python/swagger_client/apis/pet_api.py @@ -679,3 +679,158 @@ class PetApi(object): auth_settings=auth_settings, callback=params.get('callback')) return response + + def get_pet_by_id_with_byte_array(self, pet_id, **kwargs): + """ + Fake endpoint to test byte array return by 'Find pet by ID' + Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_pet_by_id_with_byte_array(pet_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param int pet_id: ID of pet that needs to be fetched (required) + :return: Binary + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['pet_id'] + all_params.append('callback') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_pet_by_id_with_byte_array" % key + ) + params[key] = val + del params['kwargs'] + + # verify the required parameter 'pet_id' is set + if ('pet_id' not in params) or (params['pet_id'] is None): + raise ValueError("Missing the required parameter `pet_id` when calling `get_pet_by_id_with_byte_array`") + + resource_path = '/pet/{petId}?testing_byte_array=true'.replace('{format}', 'json') + method = 'GET' + + path_params = {} + if 'pet_id' in params: + path_params['petId'] = params['pet_id'] + + query_params = {} + + header_params = {} + + form_params = {} + files = {} + + body_params = None + + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type([]) + + # Authentication setting + auth_settings = ['api_key'] + + response = self.api_client.call_api(resource_path, method, + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=files, + response_type='Binary', + auth_settings=auth_settings, + callback=params.get('callback')) + return response + + def add_pet_using_byte_array(self, **kwargs): + """ + Fake endpoint to test byte array in body parameter for adding a new pet to the store + + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.add_pet_using_byte_array(callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param Binary body: Pet object in the form of byte array + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] + all_params.append('callback') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method add_pet_using_byte_array" % key + ) + params[key] = val + del params['kwargs'] + + + resource_path = '/pet?testing_byte_array=true'.replace('{format}', 'json') + method = 'POST' + + path_params = {} + + query_params = {} + + header_params = {} + + form_params = {} + files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json', 'application/xml']) + + # Authentication setting + auth_settings = ['petstore_auth'] + + response = self.api_client.call_api(resource_path, method, + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=files, + response_type=None, + auth_settings=auth_settings, + callback=params.get('callback')) + return response From 51468503b294227e75959300070811c30232018c Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 18 Jan 2016 22:05:36 +0100 Subject: [PATCH 24/76] fix post, put, delete and patch when body is null [android-volley-library] --- .../android/libraries/volley/apiInvoker.mustache | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index 1f3b899d2489..dbcfb7c454c4 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -425,6 +425,8 @@ public class ApiInvoker { } else { request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } + } else { + request = new PostRequest(url, headers, null, null, stringRequest, errorListener); } } else if ("PUT".equals(method)) { @@ -437,6 +439,8 @@ public class ApiInvoker { } else { request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } + } else { + request = new PutRequest(url, headers, null, null, stringRequest, errorListener); } } else if ("DELETE".equals(method)) { @@ -449,6 +453,8 @@ public class ApiInvoker { } else { request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } + } else { + request = new DeleteRequest(url, headers, null, null, stringRequest, errorListener); } } else if ("PATCH".equals(method)) { @@ -461,7 +467,9 @@ public class ApiInvoker { } else { request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } - } + } else { + request = new PatchRequest(url, headers, null, null, stringRequest, errorListener); + } } return request; } From 97e1d1e27352790549cea42a7d78758615b5d4dd Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 18 Jan 2016 22:06:02 +0100 Subject: [PATCH 25/76] fix networ error excetption for synchronous requests [android-volley-library] --- .../src/main/resources/android/libraries/volley/api.mustache | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache index be1074f40377..d98ef59be18b 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache @@ -120,6 +120,9 @@ public class {{classname}} { } catch (InterruptedException ex) { throw ex; } catch (ExecutionException ex) { + if(ex.getCause() instanceof VolleyError) { + throw new ApiException(((VolleyError) ex.getCause()).networkResponse.statusCode, ((VolleyError) ex.getCause()).getMessage()); + } throw ex; } catch (TimeoutException ex) { throw ex; From 060f0f33c2bfd12c2b1894563e3d260c710626da Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 18 Jan 2016 22:11:11 +0100 Subject: [PATCH 26/76] add test dependencies [android-volley-library] --- .../resources/android/libraries/volley/build.mustache | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache index 87d7f4a882cf..f3cf1c21da6b 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache @@ -49,6 +49,10 @@ android { } } } + + testOptions { + unitTests.returnDefaultValues = true + } } @@ -58,6 +62,8 @@ ext { httpclient_version = "4.3.3" volley_version = "1.0.19" junit_version = "4.8.1" + robolectric_version = "3.0" + concurrent_unit_version = "0.4.2" } dependencies { @@ -67,6 +73,8 @@ dependencies { compile "org.apache.httpcomponents:httpmime:$httpclient_version" compile "com.mcxiaoke.volley:library:${volley_version}@aar" testCompile "junit:junit:$junit_version" + testCompile "org.robolectric:robolectric:${robolectric_version}" + testCompile "net.jodah:concurrentunit:${concurrentunitVersion}" } afterEvaluate { From b4bce238c2c19db047e9282e958714dc88ebbc6f Mon Sep 17 00:00:00 2001 From: John Hancock Date: Tue, 12 Jan 2016 21:26:49 -0500 Subject: [PATCH 27/76] CSharp: Optionally build csproj file --- .../io/swagger/codegen/CodegenConstants.java | 6 +++ .../languages/CSharpClientCodegen.java | 31 ++++++++++-- .../main/resources/csharp/Project.mustache | 47 +++++++++++++++++++ .../csharp/CSharpClientOptionsTest.java | 4 ++ .../options/CSharpClientOptionsProvider.java | 3 ++ 5 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/csharp/Project.mustache 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 4a4f9e037ef2..e2d3993fc444 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 @@ -62,4 +62,10 @@ public class CodegenConstants { public static final String OPTIONAL_ASSEMBLY_INFO = "optionalAssemblyInfo"; public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs (Default: true)."; + public static final String OPTIONAL_PROJECT_FILE = "optionalProjectFile"; + public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate {PackageName}.csproj (Default: true)."; + + public static final String OPTIONAL_PROJECT_GUID = "packageGuid"; + public static final String OPTIONAL_PROJECT_GUID_DESC = "The GUID that will be associated with the C# project"; + } 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 23c266e618fc..3a5423d69d85 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 @@ -24,8 +24,10 @@ import org.slf4j.LoggerFactory; public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); protected boolean optionalAssemblyInfoFlag = true; + protected boolean optionalProjectFileFlag = true; protected boolean optionalMethodArgumentFlag = true; protected boolean useDateTimeOffsetFlag = false; + protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; protected String packageTitle = "Swagger Library"; protected String packageProductName = "SwaggerLibrary"; protected String packageDescription = "A library generated from a Swagger doc"; @@ -119,6 +121,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString())); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder)); cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC)); + cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_PROJECT_FILE, + CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.TRUE.toString())); + cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, CodegenConstants.OPTIONAL_PROJECT_GUID_DESC) + .defaultValue(this.packageGuid)); } @Override @@ -163,7 +169,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig additionalProperties.put("packageDescription", packageDescription); additionalProperties.put("packageCompany", packageCompany); additionalProperties.put("packageCopyright", packageCopyright); - + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) + { + setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); + } + additionalProperties.put("packageGuid", packageGuid); + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)) { setOptionalMethodArgumentFlag(Boolean.valueOf(additionalProperties .get(CodegenConstants.OPTIONAL_METHOD_ARGUMENT).toString())); @@ -183,6 +195,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiException.cs")); supportingFiles.add(new SupportingFile("ApiResponse.mustache", sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiResponse.cs")); + supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); @@ -190,10 +203,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("packages.config.mustache", "vendor" + java.io.File.separator, "packages.config")); supportingFiles.add(new SupportingFile("README.md", "", "README.md")); + String packageFolder = sourceFolder + File.separator + packageName.replace(".", java.io.File.separator); if (optionalAssemblyInfoFlag) { - supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", "src" + File.separator + "Properties", "AssemblyInfo.cs")); + supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", packageFolder + File.separator + "Properties", "AssemblyInfo.cs")); + } + if (optionalProjectFileFlag) { + supportingFiles.add(new SupportingFile("Project.mustache", packageFolder, clientPackage + ".csproj")); } - } @Override @@ -338,6 +354,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig this.optionalAssemblyInfoFlag = flag; } + public void setOptionalProjectFileFlag(boolean flag) { + this.optionalProjectFileFlag = flag; + } + public void setOptionalMethodArgumentFlag(boolean flag) { this.optionalMethodArgumentFlag = flag; } @@ -350,7 +370,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("datetime", "DateTime?"); } - + public void setPackageGuid(String packageGuid) { + this.packageGuid = packageGuid; + } + public void setPackageName(String packageName) { this.packageName = packageName; } diff --git a/modules/swagger-codegen/src/main/resources/csharp/Project.mustache b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache new file mode 100644 index 000000000000..0e521341490a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache @@ -0,0 +1,47 @@ + + + + Debug + AnyCPU + {{packageGuid}} + Library + Properties + {{packageTitle}} + {{packageTitle}} + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java index 367977e2b052..7b1695f911fd 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -37,6 +37,10 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest { times = 1; clientCodegen.useDateTimeOffset(true); times = 1; + clientCodegen.setOptionalProjectFileFlag(true); + times = 1; + clientCodegen.setPackageGuid(CSharpClientOptionsProvider.PACKAGE_GUID_VALUE); + times = 1; }}; } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java index 0c2da1f3fa2a..eb187848aa61 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java @@ -10,6 +10,7 @@ public class CSharpClientOptionsProvider implements OptionsProvider { public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp"; public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String SOURCE_FOLDER_VALUE = "src_csharp"; + public static final String PACKAGE_GUID_VALUE = "{894EAEBB-649A-498C-A735-10D0BD7B73E0}"; @Override public String getLanguage() { @@ -26,6 +27,8 @@ public class CSharpClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true") .put(CodegenConstants.USE_DATETIME_OFFSET, "true") .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .put(CodegenConstants.OPTIONAL_PROJECT_FILE, "true") + .put(CodegenConstants.OPTIONAL_PROJECT_GUID, PACKAGE_GUID_VALUE) .build(); } From 629567c5ac1a08d87fc232fc80efbd46db09dfcc Mon Sep 17 00:00:00 2001 From: John Hancock Date: Tue, 19 Jan 2016 20:46:51 -0500 Subject: [PATCH 28/76] Fix project file option handling --- .../swagger/codegen/languages/CSharpClientCodegen.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 3a5423d69d85..2f3af7ff8562 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 @@ -24,7 +24,7 @@ import org.slf4j.LoggerFactory; public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); protected boolean optionalAssemblyInfoFlag = true; - protected boolean optionalProjectFileFlag = true; + protected boolean optionalProjectFileFlag = false; protected boolean optionalMethodArgumentFlag = true; protected boolean useDateTimeOffsetFlag = false; protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; @@ -122,7 +122,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder)); cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC)); cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_PROJECT_FILE, - CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.TRUE.toString())); + CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.FALSE.toString())); cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, CodegenConstants.OPTIONAL_PROJECT_GUID_DESC) .defaultValue(this.packageGuid)); } @@ -170,6 +170,12 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig additionalProperties.put("packageCompany", packageCompany); additionalProperties.put("packageCopyright", packageCopyright); + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE)) + { + setOptionalProjectFileFlag(Boolean.valueOf( + additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_FILE).toString())); + } + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) { setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); From 92e7d0e69c0af98964ff463c4ea61b779b51dbf2 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 20 Jan 2016 19:59:28 +0100 Subject: [PATCH 29/76] fix ApiKeyAuth applyToHeader when no api-key is provided --- .../android/libraries/volley/auth/apikeyauth.mustache | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/apikeyauth.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/apikeyauth.mustache index a1824b551ca9..44c5ed96eca6 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/apikeyauth.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/apikeyauth.mustache @@ -44,6 +44,9 @@ public class ApiKeyAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { String value; + if (apiKey == null) { + return; + } if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; } else { From 407837ebe2c7cf8fe7f39cd896641324b69ac060 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 20 Jan 2016 20:11:36 +0100 Subject: [PATCH 30/76] Added configurable timeout --- .../libraries/volley/apiInvoker.mustache | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index dbcfb7c454c4..abb885bdabb2 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -49,6 +49,8 @@ public class ApiInvoker { private Map authentications; + private int connectionTimeout; + /** Content type "text/plain" with UTF-8 encoding. */ public static final ContentType TEXT_PLAIN_UTF8 = ContentType.create("text/plain", Consts.UTF_8); @@ -174,15 +176,15 @@ public class ApiInvoker { } public static void initializeInstance() { - initializeInstance(null, null, 0, null); + initializeInstance(null); } public static void initializeInstance(Cache cache) { - initializeInstance(cache, null, 0, null); + initializeInstance(cache, null, 0, null, 30); } - public static void initializeInstance(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { - INSTANCE = new ApiInvoker(cache, network, threadPoolSize, delivery); + public static void initializeInstance(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery, int connectionTimeout) { + INSTANCE = new ApiInvoker(cache, network, threadPoolSize, delivery, connectionTimeout); setUserAgent("Android-Volley-Swagger"); // Setup authentications (key: authentication name, value: authentication). @@ -199,7 +201,7 @@ public class ApiInvoker { INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); } - private ApiInvoker(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + private ApiInvoker(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery, int connectionTimeout) { if(cache == null) cache = new NoCache(); if(network == null) { HttpStack stack = new HurlStack(); @@ -211,6 +213,7 @@ public class ApiInvoker { } else { initConnectionRequest(cache, network, threadPoolSize, delivery); } + this.connectionTimeout = connectionTimeout; } public static ApiInvoker getInstance() { @@ -326,6 +329,14 @@ public class ApiInvoker { throw new RuntimeException("No API key authentication configured!"); } + public void setConnectionTimeout(int connectionTimeout){ + this.connectionTimeout = connectionTimeout; + } + + public int getConnectionTimeout() { + return connectionTimeout; + } + /** * Update query and header parameters based on authentication settings. * @@ -344,7 +355,7 @@ public class ApiInvoker { Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, future, future); if(request != null) { mRequestQueue.add(request); - return future.get(30, TimeUnit.SECONDS); + return future.get(connectionTimeout, TimeUnit.SECONDS); } else return "no data"; } From 7f03d5c69e1c5f1d1f3447f074d0912f581e1d9c Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 20 Jan 2016 20:49:37 +0100 Subject: [PATCH 31/76] Added PetApiTest [android-volley] --- .../io/swagger/petstore/test/PetApiTest.java | 394 ++++++++++++++++++ 1 file changed, 394 insertions(+) create mode 100644 samples/client/petstore/android/volley/src/test/java/io/swagger/petstore/test/PetApiTest.java diff --git a/samples/client/petstore/android/volley/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/android/volley/src/test/java/io/swagger/petstore/test/PetApiTest.java new file mode 100644 index 000000000000..92812f805064 --- /dev/null +++ b/samples/client/petstore/android/volley/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -0,0 +1,394 @@ +package es.shyri.swagger.android.volley.petstore.full; + +import com.android.volley.ExecutorDelivery; +import com.android.volley.Network; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.BasicNetwork; +import com.android.volley.toolbox.HttpStack; +import com.android.volley.toolbox.HurlStack; +import com.android.volley.toolbox.NoCache; + +import net.jodah.concurrentunit.Waiter; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Executors; + +import io.swagger.client.ApiException; +import io.swagger.client.ApiInvoker; +import io.swagger.client.api.PetApi; +import io.swagger.client.model.Category; +import io.swagger.client.model.Pet; + +import static com.ibm.icu.impl.Assert.fail; +import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + + +@RunWith(RobolectricTestRunner.class) +public class PetApiTest { + PetApi api = null; + + @Before + public void setup() { + HttpStack stack = new HurlStack(); + Network network = new BasicNetwork(stack); + ApiInvoker.initializeInstance(new NoCache(), network, 4, new ExecutorDelivery(Executors.newSingleThreadExecutor()), 30); + api = new PetApi(); + } + + @Test + public void testCreateAndGetPet() throws Exception { + final Waiter waiter = new Waiter(); + final Pet pet = createRandomPet(); + api.addPet(pet, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + api.getPetById(pet.getId(), new Response.Listener() { + @Override + public void onResponse(Pet response) { + Pet fetched = response; + waiter.assertNotNull(fetched); + waiter.assertEquals(pet.getId(), fetched.getId()); + waiter.assertNotNull(fetched.getCategory()); + waiter.assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + } + + @Test + public void testUpdatePet() throws Exception { + final Waiter waiter = new Waiter(); + + final Pet pet = createRandomPet(); + pet.setName("programmer"); + + api.updatePet(pet, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + api.getPetById(pet.getId(), new Response.Listener() { + @Override + public void onResponse(Pet fetched) { + waiter.assertNotNull(fetched); + waiter.assertEquals(pet.getId(), fetched.getId()); + waiter.assertNotNull(fetched.getCategory()); + waiter.assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + } + + @Test + public void testFindPetsByStatus() throws Exception { + final Waiter waiter = new Waiter(); + final Pet pet = createRandomPet(); + pet.setName("programmer"); + pet.setStatus(Pet.StatusEnum.available); + + api.updatePet(pet, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + api.findPetsByStatus(Arrays.asList(new String[]{"available"}), new Response.Listener>() { + @Override + public void onResponse(List pets) { + waiter.assertNotNull(pets); + + boolean found = false; + for (Pet fetched : pets) { + if (fetched.getId().equals(pet.getId())) { + found = true; + break; + } + } + + waiter.assertTrue(found); + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + } + + @Test + public void testUpdatePetWithForm() throws Exception { + final Waiter waiter = new Waiter(); + final Pet pet = createRandomPet(); + pet.setName("frank"); + + api.addPet(pet, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + final Pet[] fetched = new Pet[1]; + + api.getPetById(pet.getId(), new Response.Listener() { + @Override + public void onResponse(Pet petResponse) { + fetched[0] = petResponse; + waiter.assertEquals("frank", fetched[0].getName()); + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + api.updatePetWithForm(String.valueOf(fetched[0].getId()), "furt", null, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + api.getPetById(fetched[0].getId(), new Response.Listener() { + @Override + public void onResponse(Pet updated) { + waiter.assertEquals("furt", updated.getName()); + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + } + + @Test + public void testDeletePet() throws Exception { + final Waiter waiter = new Waiter(); + + Pet pet = createRandomPet(); + api.addPet(pet, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + final Pet[] fetched = new Pet[1]; + + api.getPetById(pet.getId(), new Response.Listener() { + @Override + public void onResponse(Pet response) { + fetched[0] = response; + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + api.deletePet(fetched[0].getId(), "special-key", new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + + api.getPetById(fetched[0].getId(), new Response.Listener() { + @Override + public void onResponse(Pet response) { + waiter.fail("expected an error"); + waiter.resume(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + waiter.assertEquals(404, error.networkResponse.statusCode); + waiter.resume(); + } + }); + waiter.await(); + } + + + + @Test + public void testUploadFile() throws Exception { + final Waiter waiter = new Waiter(); + + Pet pet = createRandomPet(); + api.addPet(pet, new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + + File file = new File("hello.txt"); + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write("Hello world!"); + writer.close(); + + api.uploadFile(pet.getId(), "a test file", new File(file.getAbsolutePath()), new Response.Listener() { + @Override + public void onResponse(String response) { + waiter.resume(); + } + }, createErrorListener(waiter)); + + waiter.await(); + } + + @Test + public void testCreateAndGetPetSync() throws Exception { + Pet pet = createRandomPet(); + api.addPet(pet); + + Pet fetched = api.getPetById(pet.getId()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + + @Test + public void testUpdatePetSync() throws Exception { + Pet pet = createRandomPet(); + pet.setName("programmer"); + + api.updatePet(pet); + + Pet fetched = api.getPetById(pet.getId()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + + @Test + public void testFindPetsByStatusSync() throws Exception { + Pet pet = createRandomPet(); + pet.setName("programmer"); + pet.setStatus(Pet.StatusEnum.available); + + api.updatePet(pet); + + List pets = api.findPetsByStatus(Arrays.asList(new String[]{"available"})); + assertNotNull(pets); + + boolean found = false; + for (Pet fetched : pets) { + if (fetched.getId().equals(pet.getId())) { + found = true; + break; + } + } + + assertTrue(found); + } + + @Test + public void testUpdatePetWithFormSync() throws Exception { + Pet pet = createRandomPet(); + pet.setName("frank"); + api.addPet(pet); + + Pet fetched = api.getPetById(pet.getId()); + assertEquals("frank", fetched.getName()); + + api.updatePetWithForm(String.valueOf(fetched.getId()), "furt", null); + Pet updated = api.getPetById(fetched.getId()); + assertEquals("furt", updated.getName()); + } + + @Test + public void testDeletePetSync() throws Exception { + Pet pet = createRandomPet(); + api.addPet(pet); + + Pet fetched = api.getPetById(pet.getId()); + api.deletePet(fetched.getId(), null); + + try { + fetched = api.getPetById(fetched.getId()); + fail("expected an error"); + } catch (ApiException e) { + assertEquals(404, e.getCode()); + } + } + + @Test + public void testUploadFileSync() throws Exception { + Pet pet = createRandomPet(); + api.addPet(pet); + + File file = new File("hello.txt"); + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write("Hello world!"); + writer.close(); + + api.uploadFile(pet.getId(), "a test file", new File(file.getAbsolutePath())); + } + + private Pet createRandomPet() { + Pet pet = new Pet(); + pet.setId(System.currentTimeMillis()); + pet.setName("gorilla"); + + Category category = new Category(); + category.setName("really-happy"); + + pet.setCategory(category); + pet.setStatus(Pet.StatusEnum.available); + List photos = Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"}); + pet.setPhotoUrls(photos); + + return pet; + } + + private Response.ErrorListener createErrorListener(final Waiter waiter) { + return new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + error.printStackTrace(); + waiter.fail(error.getMessage()); + waiter.resume(); + } + }; + } +} \ No newline at end of file From 877661a1f43f65644b0ded321a3135b971690a88 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 20 Jan 2016 20:59:55 +0100 Subject: [PATCH 32/76] Add OAuth stub [androiod-volley] --- .../android/libraries/volley/apiInvoker.mustache | 3 +++ .../android/libraries/volley/auth/oauth.mustache | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/oauth.mustache diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index abb885bdabb2..2a04c1c86b19 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -196,6 +196,9 @@ public class ApiInvoker { {{#isBasic}} INSTANCE.authentications.put("{{name}}", new HttpBasicAuth()); {{/isBasic}} + {{#isOAuth}} + INSTANCE.authentications.put("{{name}}", new OAuth()); + {{/isOAuth}} {{/authMethods}} // Prevent the authentications from being modified. INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/oauth.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/oauth.mustache new file mode 100644 index 000000000000..7eb4fe4aaba8 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/auth/oauth.mustache @@ -0,0 +1,13 @@ +package {{invokerPackage}}.auth; + +import {{invokerPackage}}.Pair; + +import java.util.Map; +import java.util.List; + +public class OAuth implements Authentication { + @Override + public void applyToParams(List queryParams, Map headerParams) { + // TODO stub + } +} From 7a5d9412c58899fe44f306a4aec48b764eaf0156 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 18 Jan 2016 11:39:32 +0800 Subject: [PATCH 33/76] update csharp configuration to avoid circular dependency, deprecate ApiClient.Default --- .../main/resources/csharp/ApiClient.mustache | 3 +- .../resources/csharp/Configuration.mustache | 59 +++++++++++------- .../csharp/IO/Swagger/Client/ApiClient.cs | 3 +- .../csharp/IO/Swagger/Client/Configuration.cs | 59 +++++++++++------- .../SwaggerClientTest.userprefs | 21 +------ .../csharp/SwaggerClientTest/TestApiClient.cs | 27 ++++++++ .../bin/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 34926 -> 34893 bytes .../obj/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes 9 files changed, 110 insertions(+), 62 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 049f8814fc37..3b83a33c8894 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -61,7 +61,8 @@ namespace {{packageName}}.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - public static ApiClient Default = new ApiClient(Configuration.Default); + [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + public static ApiClient Default; /// /// Gets or sets the Configuration. diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index a7e5df5179c0..e7a19003e156 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -37,10 +37,7 @@ namespace {{packageName}}.Client int timeout = 100000 ) { - if (apiClient == null) - ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); Username = username; Password = password; @@ -64,18 +61,15 @@ namespace {{packageName}}.Client /// Api client. public Configuration(ApiClient apiClient) { - if (apiClient == null) - ApiClient = ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); } - + /// /// Version of the package. /// /// Version of the package. public const string Version = "{{packageVersion}}"; - + /// /// Gets or sets the default Configuration. /// @@ -103,8 +97,31 @@ namespace {{packageName}}.Client /// The API client. public ApiClient ApiClient; + /// + /// Set the ApiClient using Default or ApiClient instance + /// + /// An instance of ApiClient + /// + public void setApiClientUsingDefault (ApiClient apiClient = null) + { + if (apiClient == null) + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = new ApiClient(); + + ApiClient = Default != null ? Default.ApiClient : new ApiClient(); + } + else + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = apiClient; + + ApiClient = apiClient; + } + } + private Dictionary _defaultHeaderMap = new Dictionary(); - + /// /// Gets or sets the default header. /// @@ -134,13 +151,13 @@ namespace {{packageName}}.Client /// /// The username. public String Username { get; set; } - + /// /// Gets or sets the password (HTTP basic authentication). /// /// The password. public String Password { get; set; } - + /// /// Gets or sets the access token for OAuth2 authentication. /// @@ -152,7 +169,7 @@ namespace {{packageName}}.Client /// /// The API key. public Dictionary ApiKey = new Dictionary(); - + /// /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. /// @@ -174,9 +191,9 @@ namespace {{packageName}}.Client else return apiKeyValue; } - + private string _tempFolderPath = Path.GetTempPath(); - + /// /// Gets or sets the temporary folder path to store the files downloaded from the server. /// @@ -184,19 +201,19 @@ namespace {{packageName}}.Client public String TempFolderPath { get { return _tempFolderPath; } - - set + + set { if (String.IsNullOrEmpty(value)) { _tempFolderPath = value; return; } - + // create the directory if it does not exist if (!Directory.Exists(value)) Directory.CreateDirectory(value); - + // check if the path contains directory separator at the end if (value[value.Length - 1] == Path.DirectorySeparatorChar) _tempFolderPath = value; @@ -251,7 +268,7 @@ namespace {{packageName}}.Client .Where(x => x.Name == "System.Core").First().Version.ToString() + "\n"; report += " Version of the API: {{version}}\n"; report += " SDK Package Version: {{packageVersion}}\n"; - + return report; } } 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 9ebd05fa7312..70b17804f65d 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 @@ -61,7 +61,8 @@ namespace IO.Swagger.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - public static ApiClient Default = new ApiClient(Configuration.Default); + [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + public static ApiClient Default; /// /// Gets or sets the Configuration. diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index d321ad5ef82a..e55fc875f42f 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -37,10 +37,7 @@ namespace IO.Swagger.Client int timeout = 100000 ) { - if (apiClient == null) - ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); Username = username; Password = password; @@ -64,18 +61,15 @@ namespace IO.Swagger.Client /// Api client. public Configuration(ApiClient apiClient) { - if (apiClient == null) - ApiClient = ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); } - + /// /// Version of the package. /// /// Version of the package. public const string Version = "1.0.0"; - + /// /// Gets or sets the default Configuration. /// @@ -103,8 +97,31 @@ namespace IO.Swagger.Client /// The API client. public ApiClient ApiClient; + /// + /// Set the ApiClient using Default or ApiClient instance + /// + /// An instance of ApiClient + /// + public void setApiClientUsingDefault (ApiClient apiClient = null) + { + if (apiClient == null) + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = new ApiClient(); + + ApiClient = Default != null ? Default.ApiClient : new ApiClient(); + } + else + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = apiClient; + + ApiClient = apiClient; + } + } + private Dictionary _defaultHeaderMap = new Dictionary(); - + /// /// Gets or sets the default header. /// @@ -134,13 +151,13 @@ namespace IO.Swagger.Client /// /// The username. public String Username { get; set; } - + /// /// Gets or sets the password (HTTP basic authentication). /// /// The password. public String Password { get; set; } - + /// /// Gets or sets the access token for OAuth2 authentication. /// @@ -152,7 +169,7 @@ namespace IO.Swagger.Client /// /// The API key. public Dictionary ApiKey = new Dictionary(); - + /// /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. /// @@ -174,9 +191,9 @@ namespace IO.Swagger.Client else return apiKeyValue; } - + private string _tempFolderPath = Path.GetTempPath(); - + /// /// Gets or sets the temporary folder path to store the files downloaded from the server. /// @@ -184,19 +201,19 @@ namespace IO.Swagger.Client public String TempFolderPath { get { return _tempFolderPath; } - - set + + set { if (String.IsNullOrEmpty(value)) { _tempFolderPath = value; return; } - + // create the directory if it does not exist if (!Directory.Exists(value)) Directory.CreateDirectory(value); - + // check if the path contains directory separator at the end if (value[value.Length - 1] == Path.DirectorySeparatorChar) _tempFolderPath = value; @@ -251,7 +268,7 @@ namespace IO.Swagger.Client .Where(x => x.Name == "System.Core").First().Version.ToString() + "\n"; report += " Version of the API: 1.0.0\n"; report += " SDK Package Version: 1.0.0\n"; - + return report; } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 4a3939f70947..1b32b6e5da67 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -1,29 +1,14 @@  - + - + - + - - - - - - - - - - - - - - - diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index d57627a623a5..af7c22ba0880 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using IO.Swagger.Client; +using IO.Swagger.Api; namespace SwaggerClientTest.TestApiClient { @@ -111,6 +112,32 @@ namespace SwaggerClientTest.TestApiClient Assert.AreEqual("sun.gif", ApiClient.SanitizeFilename(".\\sun.gif")); } + + [Test ()] + public void TestApiClientInstance () + { + PetApi p1 = new PetApi (); + PetApi p2 = new PetApi (); + + Configuration c1 = new Configuration (); // using default ApiClient + PetApi p3 = new PetApi (c1); + + ApiClient a1 = new ApiClient(); + Configuration c2 = new Configuration (a1); // using default ApiClient + PetApi p4 = new PetApi (c2); + + + // ensure both using the same default ApiClient + Assert.AreSame(p1.Configuration.ApiClient, p2.Configuration.ApiClient); + Assert.AreSame(p1.Configuration.ApiClient, Configuration.Default.ApiClient); + + Assert.AreSame(p3.Configuration.ApiClient, c1.ApiClient); + Assert.AreSame(p3.Configuration.ApiClient, Configuration.Default.ApiClient); + + Assert.AreSame(p4.Configuration.ApiClient, c2.ApiClient); + Assert.AreNotSame(p4.Configuration.ApiClient, Configuration.Default.ApiClient); + + } } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index 10b5d98d5fad634730375b3da0c5a3c58207f3ab..ad3f04827de336f237615fbba44b7cd961f524e5 100755 GIT binary patch delta 13609 zcmZvi30#!b_y6yCU|>K{wwVEDhXDpuT)yV6LGHPvxo;(kCT_T3?hK@&rj|N>9o))2 zE%%|Ya!n;QHFwLUzy&R}GPT95e&?L$GUMy}|3ALw%zfX_Ip^Mc?tPvakb-N$1=oTX zZB|Ze7Jt~QdVxj}9R*%CMQ8&S+oRofcwM=0+x-^gC+|d&uJ-s+ghouS2|`>E0xe&6 zp9!%z-BVZzY3{B{1VnqYl-3G_yEg?UL%8=;;BbP5!2|GB<1Vv#T z0K&Xy!e0gKORPbCFV}ElpZiRBWA`Y1h_@u-HPWJ^NNXBZPu0%4Tf}U`?t3xR9i_8_ zHVj12)bWip?y=f>-ckBV6m`o$a<$m@RdR6<%B$TGF}2-E@rCH|K|Fb!j-Nx5>SZRF zVSYCVA>7fhWjN(jri~RMP??sCHaA*`(EK;CRXZ}~pP-GXPl&;;0_x)a{7F^fCU2p` z5Qv$UI~$@ssz7JomJlid%XGeEeeErS2q}p^Iy`434 zHm9%!&8=|Qy|uXsj(CqZzeC%ytK~}4J7@X|p$9624y{@U6SlYz$9)4*S3Vnam3YE? zDD!7d*y=kB?sUCF;wS1Vj~kLqfIYwmenPvb%D(=C+J4e3ss{dV_G1ebdf{L?do z#(S}MJRP2XeW48P?Q>&x6RY@nhT-lMJXe znHoto>^O~UIBYukFPxrAHS9R8%snH2A*QM3qVD>x7`6MHJFbvQJGhX#=M^5J(srEV zEA3CXdS%)Jv}$P|S5@OrU#X}opUsmh@u~N~oC8!^*L#or}U<1#?u!+LDY_dY4d(0*i zIK1;W#cFZOHf-;MUVm@@SOMWZysJIL)xZ*_y`}^@V?cxoCBR7?ipCk~c6htO8h7WC zHo@47Pl_P-J#Vj2d{_jfMb}kCTarShlqQ6GXGvR^BIc@}Cqe`??M}`7hWMOnVyS9P zYlPUeMiowYB1F&(>QhulpTdrfHR$N~5shmj%arj|Ej48|!YCRnK+UJV3GbtlVg)y9 zL1}gzzCAo+1&DG-o@~A{pffo9l#LGpe5h9SK5WlOIWB<3e zDnR;2K9?&}2TPQ8LZV0FJ)oivdLImf=cpcX} z)oHPHkPwOaLd0eXajOotyXTG18S};joRWC9NQl-p?CaTGWb6_m0{ar%_3Y3Z-@793 z^lS@*6#EFoOne={Iws?*62CvafSiTzEAjo2=SdjUgVUuc;V@c>9+-Af2^9_MoC;bG z?Qz6V(c81F2DoZe1Hd6BicZ3e@ll>;5s>Rz#GMU+I{S+i5C9RPJV=P;@S0f5G%lEE zh*-~5swJ8%K43b{G(&7*iVY!ciP*-}j;UDeU|PboO?a7hF?q$uF2>+c3Opu0WlCT= zEk0*j#&k;@VA{iUPaI+j#2auqC~%a?!lZ>SnFcdi;47wgn3CWW(?zD{a28y&-hUWh zg7YkP52K`g;4;$`rh)J+(}8f(#=~`{YfO{idnQeF(iXr?CL7ZdxXsj#=>zzIDVu2< z+=BoY4!@A`3;3DEElgj+L#CTd*Wd}$KTH+yJ5v%qx0b_i@E6l7On<@OOtYEr8=683 z+|Hy^0+?e9Xe5oWQn3@oigi(hJC!75CZ_S|1Rlf#N=j*qXqXMKrSxzN zyk8xLd4?oH9oI-*fcP?MgAyQ~25Ce9-e+U6#}*upKU4e~mS)h465Rql-V=D0Y0~1i z8}T0Dt4z}%zJ#7cl3tGAZ^U>>edCWB1AUZ-ar7ZTSD9uS#^DV?mkaS748%KvuQJUF z48(gt((d^4Mm*V)4#!s*@wiGVkAGyub0+Dxc#R29mZVtYc_W@BNh!t(BW|>$myC~$ zxI=uo$~3)<8WWb2uQJV>MxzPKDXGwyWWs7nDmMPdggs=F+5_rkm_4VJ#Y)icE<<>S9`IO7hV_)BC0rA5Avx zGNt-xrfHw4mXB7LPMPZX=tI*LQ+*$mnSL_SvyQGZjq5wpA13^`<*Q7in1jstF)qn! zjxjg(QG0VEeG?xIG$)&z`Y7LA*WAoU#pXul=Ax^OI*MW+1m=nsVuX*{m|KcPDvAA` z@MJK%UNL8g@6;~sU2_|xyVBvQxvx1>Xt_W|LTed`6w8D^;^LudB^;9IFt!%8xOkO7 zhp~+qC5aAWTd_qF9maN|L=qlGm$ALr%XO{LyxCq{H~Cm?eo0V|TGx z5*@}K;uwA{p~=u;>?ySAD$!x=CE7@$!`NH&kVJ>EpD3=YdeUJWDDFz4!#Kz#UZ|&v zbQp(-){^Kj4i#hnqiS>*-w=Bw(P7LHe@mjnI8uZ)P(A4|juFH8SXBZY#&KegBsz?F zLd%D&66i2a60TYj=`cWQ>iER{3^X$d8y@yj&(Y%f{e zgm{%{PS{>~j&9lpJx5P$|N5wneZ6&=kFxB$tsbWS zG~gKf9&52roMZpOy4*+0?I*1(d{k=B}A<*(kK*$+Hru zG8;vPB&y6tF=L&mIgxgY zz^N3tShPd(3Y(;Cq!N)KsSxR7F+kE9q))_jNe7ThMX{voNPGC8W70CsUkQKNKBfG4 zm1%+!!Ty;FNan<9_RoD(J2A?>*GC-^ZT5XW8j_f1-|wS&iH+?Ce6%^SmHnWP&STsm z@w&=on)?{|g-?uhG`1i1Q5{Ds`w<`YbtLGI`e=xwr~OMGO>w+#KklQsjvSAc!u(mfKN&i6>Ucy%G^>OE2} z2B^gMNQIa#i9U=g!~&*Dpbfn#iY3v8-V%M@r7V>|8+uz5OQH>}6c;7YhTak7l5j&^ z_Pb)uVl|L<^aoKciFWiyVP2wYw4?WgQxa|HeQ}qcUzI=``an4OIaCR>p+AY?l4wJJ z77HZNhCURN`KeS1w4vdT#6gL)qn+#Uj^^MS?&$AAyIdWfcJy~qOA_tqA0lj}s?m=A zDLP4_9epb1NunM7OB73@9sOG@;wM%m(2o8qzL7*b3SfRu&51ke5&__pNIMz`ci&e< z+EEQS*QkU$Y7K(nOpC>xq|26Im?bGN`Laa|8zkA0Lg1jJ&Pbt9E@=u#1iptscbVb3G1z<=a#}vvKfD(vy^%3GtvWqdZ00K<5J_ z8&jc(c0NilLcuZCM1nIn(E)oUr8(Co)`kqey^BO6=Luay7$B*&^Fm@H*eR)pv%;0w z1WHb*X@)ufOl%6rPO3ECS&`TrVos?v-C4`g0tQH0iqsOeGA$DyIQQyagbR{Nob??U z(1)KA%fvxv3r8zBCg~)4wuVt(Q_f}L5|XP8RPsZEzHJW{ZQ*Ah4R^E!!H*Eq#yHwT ztV-HD&WpN^P+!s$XQZJcG?x^RdR^NIdNCDhV^XI$I>R7U!z}rZE)aH(mxQ#+(Z>aY zRMfs~xTxz3vnBO1L>l_S29-oo>MBP+Xv|NrB5ljmzUKbWT~gQ7b&mcpP$mBO9ROpc zHaK;pcn#i`l$)B1v{ce`)LsYIc8T*)d>!^kT882vI45ZnYJ=dKO5&5$6S^#DaDi8$ zJ%OHsp{u0p=s6gUNcsh}A@IGVfV5mBEkAgd34Pi_T{e`s7#GJn(snzt;hIXKX4)r6 z;!;(i28*E(rjqu>v_p=ekSwWf+F7K!lD-ccDTcwzk~-sn!=MLKnTXVk6mP%@mpQ~l!aBPRzHz0;T1}fojY=vVulrxoy6R{U{Ine4G|73EYlS(|992h2vCX)kW zC5^y|j)1o%<)JnLmP*P`(N!pl}iF8fUZk+dM z_)XG2T;XU?Kdy?j$I?0`je&Un@G8f+NeZpm2&r6BY|V`1iSSgCz2>V(f#37gv{acl!6Jz&^Cmc% z)YVUdTIKA?tDgkznOy4XC&4I2TK$0J$q;yhT-DW2fy+$l6JiRKtHi6H0#7B;>Zd^9 zO^Peh(h8@7MG`G=DmaAgtl~!}4aKT#=8`sQ5S|F({Y6Y-KQg_q} zV5g)(s1?EqNh44zgbR}B(ef7jB#E9ZZ^0ju@-S{DL{+MF%6DPlOfX5DTT`Dj3mQuD z)J#UoU{cFA8y4K*K(5+s*vzDE;cPg`L{*!dTm+^c{Z*R-&F=ZDHV3*g6^czYU0)^7 zftdRw7K*{T0{tB5#8f19)*LM6LY}0Lnbt_!$5irwlZvxUu|KQykg4%6Dv4T@r9hI2 z>5QZoY7KUwcB3`Go2+_1QE3s=n=0|Sm<#z*TgTcWNgpwZ z-_*D-kz8|OxWwx$o|NbaV!)1ORoGCfoh>STsX z@{*?u$|aU@p!2Dk<~-Ajl737Sg2AkWv{DI40PkWU}^gyRhe$4{| znAD`jFj*2MT@J<4lj2rDUT1&Y3YaB{w3QIs&9AKlXE*-*QDf$2fhbgC6V?%MD+4&?}Lp=&AA4eOQM`>VSx0cxOGssH-G-AC0z#@h*f*I9-8;} zCtVMnnAD^jV7Meox)J6|PfEH8dJOQ#ZGvn`q{Y;AxmEiL|ewc)MTw8a6Yj6Fmb*BvH<@a7%hp z+&MV5!yo552j55}@jMLh`o;4wib+j+0p?1gq!(ec^rW~;FucSccL^p-BJDB^FZFAe zVKS4N^BWf|l}Jgyg%asXfmdMB9)I8!SR;wFs}Q!=uU!QblbZAzG?qj;uR|Z{NpatS zW1m0nJ8(6SNaFWUe9$j`51X0Pq~&l#5+$vGThf!_Zot+<{p@ds9d$JQ1al;*dBCQw?l6>JF#iiiO5NMCxP1H7qq z-G~Vj=OTZMSpemc|HLeX`;jXGmcrdI`culskp|rY{A>=_bc1@B+73;k60pA&+sBb< zx)_dK#jzVWs;{8$@O?$ksMfl^A}5O4Z=$tBQB)V*D$bT8-ibO2A!0?;Yo6n;;{V3& zMOR1gA)Ot6+B~5f2V@I@ezC9^&P9H$n}-8j*A_y*=!@7tH2Pb%<=9V?TaNyBbW_Az z(f9EO&Ud39>egaxt|-CSXS%%@yCPsMoQ|%p{}ir7hii60WwcIz2q4C&KaP_g=@MBY zDkedH7OXK&eHI4S(N~~tr2heEHCbX%ObfkTjEs3n56YpKE_#6TF(U;i-^bk1g(%f@ zJ@spaUDscqCEDsH=;M^Wx~XXCd+~A@sVmak6NYEn3!M~j$W5F;|zt$Ji{p{R2CT~W6ySj%a8+m z46|6BV_2?~8y0bUnPH0(9J>mwDR!OV7LN8itQDEDdkt$vyV!3HyOhqcx7qU^w$&27 z6ZOb&h?jYstc9zS8JjJ3#jXfw!oMlVLfZoWM;CuH;0fso=0>S;&w%7-a4jTUvsPS+ z-4gdL=g1Zh0y~EUV!I+fjBS<(iTgFaLNUet?iq-|u4=}RfT?i?W0(Rl$;LpoM@0X) z6#)YTeMu#?iE)6S@1!Q>-MClKe`Q=xY(q>x;}&II+%Wv_+jEhlj1Gm4h(n>n6cVr( zeQ3zRA|&8QT)wdu51$%9J>y_x%sk9Q z3Vk(huF#j@<_dk?&BPS_oZUQ)dO-yY^u+asL|9nbqBks8tbGhoB1bb&*hNio3+-2M z0so^lpjwtQT~wXlAX~^Vu2W)qV&Ej?r zw)0{OxjmEZJnUH=yO!JQ*>1s}GS8`gU~oN%t>CVkY=1xjhYa8$*@gsk52+Vt=XN67 zRO~UuW^%g~+YZ>%FD{GQL)hkE&#bsYZqH;p4|~dD*K&J3+b!7hr^|4N;V|3d*ky{X z;C4j-733zje;`)_;D2XhCD?`pb`LoaXXkbz+f?ki8<)xLR%|<9PgHysw}-IJ!JcOE zh1{OWHgz6$WyP;$SkHC~_PiZ`h}(zR9><=Yo@xVNeh>sDilUg(Wdoo{qnoKaXs0Qa zvlR){ww2Z!4EG?kyk0;kQvJU|JjvNmE710zfKX4bY_PdR1MGa7LZThW;P*&bvony||DAlrUHm4Rv&{A&+l&_6!&bE9 z0JaC&iWgaBdys8L2KTTPne5N@AY1Vgt85Rl&1l6vtz7gbT5|x~gKRsRdzc5C$C=lg zH=DPacbiMiC(K|8vQ)D~SacSfrH7@j!b@|ESR<+|mT z)GiW25}GAsCbUcFoX|btwS>h9o`ls2>l3yl>`3@HVPC>m2^SLXCRh@S6Hg~z zORP);N0Ot7qqXA|M_FF*6HDIY|=nFfW-VEDU(_8sm|KFtQB+5C_k8B^YRj2hQ zxBulKL+j8obagtRHP`9sR77q3(=ZVD3>2RIZ$N!(b)Y{GtASP#5l{o$k!TeW1CiL) zmDU&zqrtioUO`%gRuQYA8@As=tKd(&-LbvKvoZ&UbownOR99cuOgBmQL>Ht#qQ9+g zX=r2c8uW3dxWu@t@%Q2bjqQzZ8fO|;k4-+D99TeKte(FT>Udrr0SUT! z&WUxXKkzwmo~LjGM7Nmd%x5Y1IcbS=SIqyquXMis|4DHcQ$%iXu4IWq0AC-KJ{bY2 zO6?iCdyuO)E1eAOl=FrT_{vps^|{JtakG^u<7~x@uUhzOfUm65j-%mbT($05qlb#j z@k6`h=9M;?1OHU_v|I))4HJguWsc2hH7aN5n7p17@Q+(t4;_{@ag=B3GPoO*K4eH< z?)cIy4@?fIQRUTP%!ItGF+)nvt$>+OI(HR3wnbjwWHG>@#p delta 13352 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 E3kkQBZvX%Q diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 292442f3a88c23f7f170b088ce9861942ab1996d..5008263b22310a03e46f36026133deea88a58324 100644 GIT binary patch literal 34893 zcmds=2YeLO`u@+^S(4o(3#1WPq=nvL6A+Ssnt-A-MNlM)gb+%oCP4+2UIR!6DJs1P zNbexMcj-lX?;^d(|9fU1X)|YLCqYv>KgnO{VpWH5 z{<9p+w=>hA`L!qJoV_l3$JV5peS~O-tLi60WP$hh7UFYQ>5mM(Qwp&V|FmF?#y_>5 z`uCK77TBsU2{BBTu9uvUlwA6=7Oh&fh-)3+JfTgq(lKqDB$Q76EUsCzgrt)3EHq1K zQ#v`Wb-Pvx$))34wMb}_Qo3D2N^(luq=eG($<5=E+LeCSnLI}K)=fxGDP5yQbrNu zMa36iSK(6M{r3io5r3y_zpKLV{EXipbl}`mTm8#%=d9N zte@2m{^a(Rh&$1<^vX9r_E!TD9nms4iIg30Ehz$6)Xu#EJ<-Q!>Z`a>v5OvlO)vZ4#+t;pi z`(@MG{2eQ`tvY_=+@hI9lmFh(ug3r97x^n=)>j{O^yBy1ZoHNwk0oxsNc`{S;$ICE zSITWFlC^&Si7CJAI8^C}-n~Sd|88FXsNZ~;eBzU8p9L25&8AH*5PRi{82fi=#A%~$ zorL6eZQCR#Jg0)aR&#UEyWgEp{-OW4^VbKjx-K{mH3^{!VHP5j5MDxf3&GhZC!an- z_zK}CgiVOd&eK;?uGVB^pxxmJ6H;ci+QLHvtny*7coh6NSZzsY+f;(ch!5>X3jb{W z*{pI*HZeBax7nOY4rwwlpn<~?&o->K9A%@bSmjUI#HwtojRdDP8Kitxc_N!QneCKe zzN|^CCFR|0;$F7<>5LB9FGTbY84%*!!!5N3*Y*or<+u2FDJku!bt#;%*X__Q zAz4_mWH1SrrL<30R|!Is>XIVMHhDri z)j4^|P*3GJlhB5mWpGqvWPrmF852`*M?hj#5EJuO`Nl5?bc+oPXdDw2m_Gz}Y+$0J zL0GncwQcNGTGmMX}pY%Go>T|9DX?&Gi4Ts6J>(QGL+PD5`Ne#j%$jz2q*M zLAk}?+(UA^m&fH6<8x17S&FoJN&m3lOO;xH-u5$>$(-9N=j0YEa<3%iKe>?^4eF45 zAcc0)%d?bfdNio;i0H-+&1%XdU(}qURC9`4rv0wktjR~V`Bx1qU*x+bpJ`I@?J1}D zj;fq;m7`G|$t_0Y9iP`-GRyLb<@r|Rb1!erC${C=&T@v5y62s-q>khh=kr}4<^N1c zb+h~*l~kUWYZrf}q~ek(skqPGCDkKTtj@nJzq@4477*tOoG;*BzFk1vDR7tN3?((n z>QPd~RGaEiPz)+KxS%j){wEAvzH#kZR8Q#eURXBx$jHOVT2 zyEmwmHfnh`varPHRHKnKh_S~8zLjyvdVU-853#*q{K{M5?c%mPC2b5{?t$y0wv^pR zDXQ#3O4G`IEGX_5>R#AgR^y6@@kJ&SaWBs)BIXvE=Ump-`N+Ux?z4>5MZ}sSYjOP# zG^-V+UnrhkJ~BAcvv>x0^nqcj4=f+?R%1t)`qI4rMQ`YNa`8vyQ@&O)TfT@oC7x+! zO+KZlntWjlTt|zDk;Ntya~I5(;$my@ZN=Tohl`6N#g96dwcEZjFw|X8mx_za#joJ{ zA1J6vrVSL-Q{O*oN9FVp%krNoqkNU>m3pRl(w_qMC?Qst+*Zyu+dSJ*pVFdl>D1Ey6UDRNbeH0pWy?@J>DrO%=3MQF4(~tIj!M=^tYFKd z8dJt|b&oEO4sT*<~j7Lmlqr@eVP;F_GmAgVmnQ9)nd$HCWAch?S0? zNclfHSRKopp%nkm2dl&{=>ZeFO4SA09TeVChnO5bC){0FJIje(<#v~IFCQ-_PLw<8 zT-F|BQ6=WOCca)y+$eVw*FU)v{KISF?pZxg40m`8U;q7U;$|Hvt!AB!@v3imvEk*j zFT0E8K?U)!!lMfA<-Qd~YQ=sP^<{0JSq4y0;pOG1iehxdF&<_I_Sa(GlyfSIxfSOb zj)z=`IMZ*bD7IGI=3#cFKUqo>`FfwFuT&yMjG*T>!T<&3ZrQaPX_C)?{IIi1V=`Tf!%aK<+%&zoZqD0rI zZc)x1kIv#sKPpO$jvC`(cBP*aCFVxWGaT!)y3%in5?iCTd6-@4PezGTQKy{_vq@Vb zpP7I&J%|zyqaL}FtW!xcPQjVRa+j^rca`*fvYp+MS+MkzaHcht#M(;h+)0i|V;atM zwvsqk>Ac%9X2W+GLz*MrARx@+`Oeu5zbM z$CQ-*seG5T|8pb9D!D@njycuj*$;UR9L`yU zzjA@|f~%Vh7d9V%LhtkOr>gfUQ6suyT-BUd!RC$ex7L%i=koKQEc9@*AsLSOp zEvJ{&hN@yu)t^cGPcAENY?!n)%x|Z=8ue^O`qilBqpolMM8UlH8ZT;Yx0^s6cQ*BnsOnFUQdX?o^lL7P%j zOszT1o#cv2lJR6g+fq|(t+~ye=)M|x)1NG8*K3L!HE+6;baUOa(+1ZPLuw7J<;p{< z^RAutLoG3**31lMhqk7cSX*nI+dL%wojdJNEpfQk5x4uh^!M(xd$q*H3Jn zD5dV+X(MWjk+r|6{m*VXFBok!ZT`P8+IY66e`AaZvTE~diyLqEc*oU%wBB_@pE`Z( zxR*!P5#Q7qJG2#E`d??#OQis>baMv*AqX~o8erhL=Jk6F51$1Vp+ZAIR7V0TEcB8A|1GL$RdM(nju5*cc}^ z#chsrFCT~#2jdPomuUbqxlif7{iU6c6Bptx;`}EUgE4&nCVLxdfN8Kv^-qg4-m~-^ zFZAB&&kf^$P%i)K8lD2`-dL=P-xu#LkPA)3#U_`UxR>uW5%-%sa4wVSo!p;vPt9w+ z6GWecz6t;A0@4SIL)@4A%k9Lor}~3ZcwUb+DM6fUda9{A)Tf(?GtJI6b1&a&CVp#n z+qq2Wueq-Kv~JBs_vSsC>j@2qaXqGuX)eY#|JLp5;hJvO7Bv@(n=eV{aILeex!B!& zkJ~lIb={|3ZZ57gznaeBTBmyp(W6Dr7OpJJc1_c3-?b3mw-}es;aX>L3$didQnzcZ zYpP!RxrNx}C#MKtp+^&7D>3XeKqUfF2C()Gw<#4U@eWDnbINt5L>tkHU zYReME^28PC9IkctCW?KD``xZVu4#MidZM_Icr%^DwNCGrqEE}dEuC2~YuUN3jR=cy zJ*jH5*=<(ygqC7r%SrAu`HgGeaCb6){^=<m+Tx62o59COb)4#|xNt4zMrk=*VvKd-0v-I7h9n_@n zeXXZin9W*UdY?)G_Qv+e(CCOa*H#X&Co1VsG9b|&V@Ry&q$67YkgQTnpuJmcV4cWF zMG=vKLDkjimMy0(G&DHWzr@QqLPMRhXt-OJjdDwm1cgghe5K~Q@hy~($4+zm2j}w7 zmOsBDRYtd4iK(sov=JtgM=aAGHKNxsYyG(uky<$*A~MFv#7l))b9GyBpzXo7dO2b@ zKWr-=wSDYdW~GJd{)O{V<{+y%wVmkKu75jMp|8dnZ*S~yG_f~urtuGJQ?rnNSRt!< zYCAEl-E@+gv@A_q#ij5Fa6*%JQ<7S=X(r9iQZ$*JbIpy8NRw=~liBx1=d;Wy z&CQuICGo?<&&^(5PG=@drq*#O@y)%hdYW2strILhUdbs*33078UzysM1>PGMUVi zTdF)F)u(Z6U=>gm(0F-#Io=WDh|w!%U@?b!GOSpHqgyve%h0gUCfYqCTw6H@<}xfG zre;8c*udxkjT=MuW`Xu5IRm2|QF_fNU@L4Z%j3-c0X*5PKK{WK-zc6pXVKt%!6i!M zE)krgLh&5=bL4vG{n)tVh+Lt$3Sjp4&+Tu^meb~+&*opIoXtPG&A$LOwRDKpeC`vm zGHEOil=IAUg2^~sX?GsBy`(yUs6Iy~Td5=F#oNnD%4ayOJGnCyOvDrmboYe_Kwgc};ttB{uw zz`taE|6=}mf>e2i+9=N8%Abo$VmbbvW;~ z2CB4$Gd=7e9(8z}-Wr~1P)9Mi#Wq?*jMXgbQ7NA(m%eS_ahnusQe5K~A zTADrF9!3ickFx|2F^NJjHBY zcfSz#zPPXaMge=*bry7kUi8pjS_?_nv)A$Ak=Urfy-i{Q*)Rt~uj?P9h<52U;!82| z%jsXbGSHQ#k*M##q}Smu#gQ+Mx?Mf!*l7fFcj%6?x_WJcJaqFw! z+~!Go>VjT?1^80pDLem!N*YU)PCmRAI zITNT8J60VfaSF28a{K#Ry%u#6`#SA+Z+xpeM8&-xcM?xJ{jOZb%~-!2YFj(l7VRpg zd_ZhKC3|%DR?GFcz2qMp?4LI{kAFUUaInp5WM}bB=kc9gnZChFE%kIZuYH}x{>}%K z%eCEHYP-Mb+YO3;*;x+y_H14^I*Xf~ACOoIucU-_ZIe=*N7R#^Eppk6$S_NBhr`jY zWh>*j%Gg3eLLy_TQ;n@&W4lN(rHh;jsUJ|W6aAbp#OoNAU%JTSX^wu}o@zjbLJJh| zx`X*{7kSU+_11!Ar25rVR;$%}XjdtQb(O;*eVg7|9@T1dde6Z!x2v3&!I9T{3zn^2 z<+e0OA+<(s@6%Y$bd_f_IP!Zx!t%JQe4-rurw1nU-dbr6IU+J5qCo?`91Wr(jOom5 zwyd_SMe>!fWi6J!3_8T>J*=A)qr1s5kde#E^akk4ZqCT7_t3JQI*LRY99S@5jH6=}PWl~HoL#fOzdg8Q8TIAxw|ehp<>@p>lye^susrN3A7yY9v<#u+8`?__gN&WWs5SCgW?-4wOU}yRC}dfWWkWBy zQ91bUtVkAGfk#EsYg5{nLshN@&#PR;3pi|9OBJqQe3d8|ZYV08QSGqXR)5^E6=Ano%Pw;HC2jksj@qy$IR;N zY4Tb}V;Pew$EG<7sd`YrIv>k|RJkyNqo{Q|mK~{bXPQH=wz;k6u$)ho7cw~VTYty$ zG*x!#=ia$qpNm>YV)>?@9F@UQ$~p(j+OQo>UiP)jaF7b>sk|FhGui47X=}wl2cHcz|4z=1y0iBUJzCs=vm9hbco{ zcGhBN|7tI3w^t~jI@_>3c4w8gTKBV?0|VqiwYQ92?gk9jbd_1Jz0di|*b(dX*rBTM z%j!#4;r>?Zy07U?zn1$U{m^|pDznerf%L%x<$TC+IxDl!PAt0y%H0_pd3`Qmxj0Z> zN^|IyIk!)jK~i)bB)dVzrgTSspHWyw50Yb)ga6J>&F3$Sjz05Pb;%&PG;PzKqodDl z>~{vqyJ>FE(a~q_ z-`Ar6eCG{e2SelnNY9+FaeCsr3(M{ya!&?FUf+vYE)9{F(;Rx7Lw&mrrT-Z!yFisMf}wI@21gO!?O1jUl{?cMdT$cydk)L_q4GioM`7RJ zu{<3ry9{&hT<=Zt_>RQ#%`iDCgQI}&94vE($$4pxXqBr_-z`|S4wKt5I12lo#&Twu zJe%ftQ>~H5_Ys!I!{n0;jsm{JhSUEHmm?q}B=0!)F$>F&!{zJ@j>5hhv1}SHH!BDK zot4#BYv4HoKhs(1r+2Qe=Z?jC-=%k3x=I_GbycQllztlMdxG7b8!peMWvi{nsOehWR*cm^?O`)W%)2JPo`arz0T^Ggls8HaDZ$J0AI zU8RlYx~kxB^_}qzt?L`P64C?ar)5#)@8dUX6y-lk&W22xgls3ICEj??jxbrY;5%6jD}J=ypvXifz9YgT>p&f&^rZ$dp<(tgd$^ji)%?s}>XY4U zzndifeYAY4*5NwLGkrAaBZsKV zW6ha%(ikE!M$U%ROqG#Va>U8Z;-{Mx_S0&r`NTx#6C>1Zf(S==K!dPEE^WfNzR?$8 zWqV7Ruo%0^X3lQ*HJ9`?7uUZF7AxgzcDx+vYc2yv`I<}knnQ8D{3?0hO-8Pck=OoI zewyp~iDFk_0geXxSA*~X$6wA~o`2I@pLMSEspU%$L-$^m;J2@TtqwGvh%Z{@)s6FLUwddRKIT`w1E`dzu z497(M)BLC-(bU@4l9J*&IBVg2V`Bl4Oz<;#rI)+fpr1LcI@#C!PP4Th<7Cfq>8n{< z{W4iyuk2876QrT7Rr3pxN!`K;SQvFGpn*~6^a@7}E0@$b44-~iOI79q6d#eIGEvh? z`GyGq)^W`em?dR~p8HIm zt>zec;Zi;zYIOM@^h#aOyReO5sUur8o{Q4)@*G6CT&qdr_u4gDaHGoP-3od;A%*^g z%}ULATdBaOQaaw3rik~{@m|-Dw_}t&QccT82GYei!nDWw%&#WbzG}3k+~z#y?AdME z&6)f%74}1FeuF1)dNe_9fw)^?YDXosx_Yy+nB3i2S)r+(tgJ9+QXN`Zk;&A~A-vp) z9l|>;u|rr?Vu!HmiH%a}!rc3d`@eEANnz1p(cv)-ppI4arN%ME!uXU6b%Yh8g+|jY zggVMahlM)AV~RP-83sM7HnX?-NLJ19>D8==O@&-f~>Mo(Qx~JE-HOx@yotvs^WVAs8S1)Nd=k_(fL>0~a$U3|ygP`oJ6l4KSv3LG)e;TO zcAiZEBB zRqle^Tl41jSVFxN9@Owt>irfe&1>EqgpYa3N$U{u=bwhFe_gRHilta5sqJma~hJ16?CYpQ_iJ6HQ9thsDO zZ53Iy&vYq9O_!q~cW~3M`oZ&7Ezhd!SZCjKxnHg7Jir7QNNsWb4|fTt#aRvLh}{1R zdg!7m0Bq^$blK$xHt6kayQ)o^)KH?C+J*6>jX2d#<7ua+cHz!_wpTSZAgUvXvB%h7 z4`@uC{UJOcRejrsgxQ^)lsPM(5OdZ*^<~cH(3=M>#Q8r5d*8)wfBQk+R(ogDgemim z8I_{&i5uO^B8Wz#OdDz+X zQy!a{-TP{ppRz`enX>0h=ZfmJu&kI*209{XZVk%O!|Od<7IR4H2-Tpq%u7hSa;E%A zt>R2xTm}Yi}QcLx&FiV2kH}`gId2D(4&iJ~p>}5P&J@D*H!mg9A8*}ADj~ow}FU8mMUs zzBbwQoRu7hY5aUS!PDbl_v)9>%P=mVFIN~oi`K&{eQXZkIXGV)G7_lR+(X}=FCXZp z^syPJ*8V?_P5QTTr7mF5T_8t5DiA8i(-%td!$LU&(qpsD^*otefobJJ`ID!|6`KPX z4=$9444*}t?5)S<9iP|;OA}Ro&X;%HBEfG9#Pou;P5he#7L(?)@3;}ughgO$X&}u zX>(L9d!RNFG@(Hy&wk3YqJ^anndhu%(G6lFVgrXf(^0*kp5-m{;;NSZB~dDD9>31j zUlBEwybfC~zt^+utZ5rpF!Q!TZie)*Epj~^DGy^hvO*s9^ti(I8^+r!Cj(Z>4f zVe2AYz52kF6vs+A7*g9+0h^1Sw^Gj6O-3ENtPM94u<2^`pvLI~Hp`=BhN+fWUVZ6G zQ?CPhVH-`?$^UW0p7Yu!6}ZCX#RH>{MqJ&vdADrSCH$?lLIx=Zd?K@7t*e3cyG z>2ZbbM~t&q$vKA4qHXolL)Xz2xvhA%t&-b~1S)b@&{tQCe zuj3d`tdS=TpGA9U%TU!G;(D}3J~mRQfQ?-%#kXtacaXbnb~VpbRjqgC=L9TWRa0%# zRn=&v|G}#Eyf+(VXs5gyXEwQ>vsNzGGw*CVSJz2#ZJoRh>7m<{*?5FmKE>2!z3jT) z!{Z9wD2$`m%Q1$JAvB8~I*%b#fBn%y5-eIT7aQqR0DnOrUoTJSCZom~o!eZskw2_) z`Y8He?cAPurO-_>`|Eo7*yAuJZRE^%qnrZial7t*JIZ2AOE$`-o*q}+_F(*Zquguw zEZWYjdfeQntk>{d-zaYw2~@zo-Xz7qO>z+Au5rdG>tVHax&ic>N6+@(I%Q4&4xjPl zYr-ZuOV6IOPOaW7#hT4>E#z#D{;oQ;7t_AYa=)j?6`N}quWyz&44>I#(RT3sFemiY z(@xCvSEKaZ!r90c*$-0NCrGCG=mlHkLfvH4szs(9+>~H5hty`$g~@Zo{CDcp3(xP} zFC0;g&*NnY`s+qElDkb?a`Bmdb+iTITYI?Xl8lnESizOskx=k)KQmSyBMxWUx&w8wUU#yOvoX)v zA?Lci7Oi`x=LTg5Np|j#yNr}7DEH9!cgP1GD-TpFXFPlGtUS(h2K9=KKNp?QA}>D6 z(%TWsB z$c)P0{5`b)J#ryr#N(LjTF|r+V_RRc&XGM8V14DcvIWyZC3h#3M%w_cGM(m5U)g z0-DBqZvu!-czJCz#w~m0*7QCj0@_*3=l06;Zm&iA+SzE_5$Lv0ithVl56BgP$>=Hj z@Hj+gF}%RI8QWIv|;av5ZVV27(wXxlJu-!FHh_qjrF z0rSQE@{-%j8BO{|q4hk#6Ke-#Z^#vbY3S((uRFKi=ezl~Sjr^n@j{>%6c{#Urf#>v0vJjK3YfN{+4_lh-}++VeQ={kZH686g_yn!wP$!8q!; z9G%|h3ef`03y;f1Zm&h_>YT)IU5RTyo8tSK_FR7n*lI+fDdDlpd$2{Q-6OU))B*;{hzis2spR;+wU$rTQ4oBw(#nJWP z*FXt$E4VQziS7z_0Hx3);IBbx^n7?CD1+V&uLfn&SKwa&_m{k4`J*{|_}e*Q=$7c_ zfcuzUU%;P(a_A9oA5b3c#b1Z~lE1R^GCCVN5L7@Hg7brl=(pj@AObxns}P|e61^H; z38K)u;T@n7`XPJ~R7N)l5MsN(5U-#U(apfC=#KDb;5GClcnF9_XA2UdN1zZf=tAiH zpbEM?90sbQ-+^Pm>*!VdA}0UrZzqWLpH;wpFx-7thS*@UQ$Zi8+K zYM?v8Ux1qEQ80hiN7O=l=O9gXA!?&T&_UpBbYZvvcnAFs{0gXpUT>#Nz`N*u@E%YX zeHK0i>Y<;)zk>JBZC?`NTuve0M|Vbl3F@Nx;$J0G(y*gV?Z3bDf}U5jP49418y~Yjez@uCg|DlM38{q z2(JK5(I?=&pc(oud=)fDXUWaoFu;RzUWMS7KqC4TI1IEzzX#UdPKjtF7 z1f9@};qO6bG=EP-tOs4tzrhzkSF}$aAq41#&IgBp?&w$HQlJO=W4I>hiS7q~26~}y z7>3>sZvn&6=itL&1X>gl;ud-& zItSVYzCnk>g}^9uP53o18r>Xj0LGxZ!tKFW^jP?7uoArro(_IOpM|%BRcP1@QK43FC7iu?M>j81|Z zf+Oe^W#~u2QS^3r3pj>81|J5$pdY}Oz;X0P4)$4Ah!g16=tOW5{T191oI;O=Q^9HU zp)lGpID@_jp95#n_u)Hg8SNj=-&_Od(Iw#A-~zfTToGJEH-hVcOXv=8Yj7Do4DJQ4 zpl8A3!BzBTcp12cJ_YXw*U^s^gB$4Ja{PTaa1&hy4h6rW--IiHTj(b6d*C{D^^%w1fPDED&zUUtCXTT3V0Uiu&==Jbyz|$UH zN8mjm3;HH}0c1scRpPkN{^*y`fgk{#3Kvz&=$-IL5QM%89|gf^zskfFoefaRh;BW=>dvHxq4&4@R3d*DVz@5R%=<)D3paOasJQq|%?}fL52=rC>42VQ$ zilOeKqtLn0!JrbF-x!NhpfdVx_zmz1dKsJmUPT{hR^P)q*JLpun9H@hy4vz-!qBp}!L0xqDH|P`4_0W^h z?MRz_NzvJ02-hR!Y_eXbTc>te2DG^e+E86PliW;hUio9 zLhv!V;G04}p>2eYMwbI|=vcT8XpByQTY`A>0JsNef}R3@3lh+);6LeH+y)FsPl5-65$L_}5-<`S_C8}W`Wy5NbW<=2eI4EaMx#UO(+1IF z&}Gnt!C3U0@T=fkbYu7f@E!UKI0<}@9tQUV-XAhm7Z7KKfO-2v~rA7k(Qo zM4LXMouL<@gV6zCF}gHd5G+AghhG6p(aCTuScdKecL&SS6&n&u^a^wh^qXKMx+(l2 z_zB$&{uHc2PlAVl)#%0W0(MLWxnKkOIJ^UFME?q3 z2b<878Zp*`&FIDO0qOZZHz&3Q2IL=|v+tH!uJYWa<1RMo+qHn=Bz%I03 zW6sgQZgdg&C9ntmHe3PxjE;vJfxYOEc=`kMK6Ej3VXz-v1?JsF;sCl4To)WfcZJ)5 zL+D}fU~m{6)`Yr%K7xK79RrS{8^P~^W9Tp8cHkHE6u3V)j$R5c0w>T76UZ0(B>EF{ z8*mCe0PYG-qi4Y1f-~s-@N#e#eGxvVfKG18IWqb@x)-`TxPYDjj{q0ZtKoUz68bW{ z8(c;|fgge^=n>86$G}zeba)E5hTZ@#1=rDM;QinR+N(L|=jfa09O!J|SM(IPD7b}Q z3iFCW@f&(Syan7w{|27}chK2dFrI?D=%R2Ta1T8Vt_bd(`34TZa1TP0q(MRB&K=8Ac`|xET(K%ak&I5ST+p82@9BAkt z;mW{_UIYIGGNFHg_W&>SBlsHdMi*>F{Rb9w1-KlrqW8nqfDig2d=B`c&8<0Bv>!SY z9RzIXs;~oOM%Rbyfh_3#aC49qeGxtf{L$t%YzG~H4n+rnKy(e*p_b7f!ykfR^nJK3 z$cFZ9OMXEJx-gs*WJgzpUj{kQ&Ea~$j{XAv9OOj%w4*;qzl6?(wu4;gif~Dg8~r}~ zCdh;C2sZc;or?4-)kVJlPD-zk@TX1H$ z6N$6HnMthny8~AH-3_b#?uFHU55Q`_hheqfW3bxq30Up-G_3Y}4(7kO$d}sh6%aHldgepb6Nhil7D&k`N#eS`t+7f)GHYccfRT z(wktTBfWQ!4oVY5lq&qcXLfe8S>USobMNo3vON1d^S6IQx|p?69l_Tirxg3|l6Qd5#UWK`&soROZisCKFU!P~>dn7>lC8>wP=a>nlrJ9OcZ_07u(7cAGjx*YjfjQ%TST-E%O^Zn{e zx!!9K()revlcg6AIk$AW82?wvx1)Wj=HgIKXf0(AMJKQ9vH9D8#IR!B=U1vOCjIp? zU;F)}25(_tN1Z;;k9IqeDg&iTR{1&h77E3@q7*wNp=(tM2=`PV9PhW01qy2Z^>-R}(v zdQf3*&aH7Z{Jj5axqdyN^%HXaOvy(<_Ml0ng09Y~{I6*PcmH)JQAZn5!}=4leeFu- zci*m$=vKXB?P;5rl*%Dm{_m!KHUB@k%4<&8SZCbv=1n?ozLr1CH({e_`@hY_zndt` zMe77Uo99CF)r0qz8F98kbip7s!NvUZXfum8y>dlN{Ht{0tXcQ9 zhDICuU!85^z`KRiK$(m&&WtiN$isGq+IWK^TzSCjkXr1i_b() zl2x|~&Yn#|XhN8U@DjpX2p=IhXXcdIPY8b@0)(&%kwb`_j`MB;uhpbIIMil~6jJ80 zSfj#&EOJ?1u{`gJylQ7c+pYrGqu&lSLImas%wv%U@`{6b4;ev@Xfik`-eyZ;9~Nu= zN-?!8@^)TvC+}S&z*$Y^Rz8ayn@^0(H$I9w176r2~1kXrrEDm$F%mwhL>Nfl+$49&2EMD62IPQ|0{D!0L4hTCG*;TgzDk-|mn% zDDds{yw=e0+!nbozqlOQ{~5iy*`b_VKujqxwSa4TVF9tIz+%U?w#du9s=g^8))ZKa z>mOZJtG)jJRn=SVsH(R*8C7+(fEZn9c_CNTYz-6J!nTLGwvUF1V`0bHmLjWNGCmyi zR<#zS_x&6da}=`3OJU-duwM!Jcdj|3LmiQKrO-}$yVp`Zw+rzQwsHdcEs-6l~rc;e9EOr+;R>V~^KZlE3;lG5t zwtGj2J`sH*9;>O_KAtr-GD1v=m`cchOig9_{vXv;Sk(q)9;>N@bZRQ$eOFC=9U<-( z?NiKEGn0yo$;GD>cWo~yE*2JF#I{GD8fS5 znK+`y;tWPa6q<4JvtXa#wlSQ_T9bj~___)xf!LN8uSx@d` zfqAV@nZF8GYgon_R?f=Q<(jyfb)@c^WvIH#TY+BoeQ~j*Pz$aH>08Z$;I#0PnG(mtwo|=EBjbCYxyo!)$#*l;u=+2>?w1+jH_ZY%Zc9Q`jm5R zk0>WbmK){R)^7RB;BZ$(O)n>Al=~FdKcJ#MHEp7z9{K-XKdP+HSib+AIx14Varwup zC;KVj*X6|B@_j0}s$*J3F}>o9imvS?6~)qu%N*OxErzWe*k>c0L+l2gwPF5#!c+}$m`DE4hUyOildr36}hT5pS zQBmS#jIj@OlR~2)r&c*e2?q$DwP24+| z`-$OBx9RJDe@)!FE49_ShcRERuPPo^oAj)!YL-TeWzox{UEAxU#fIpOj&1FLSq4#2 zQB~x=Xt6)~fScKd{rR|;<)vtGIr@s>xW|QvBYdV^^tSi0>$}yI*%^MEU5vL+FdXB3 zoZ*++#WMSHH?uSRR=e0{-)=a*@^ywkYZvG2=iSWC@OSOvp8dYzIBRi+9}y!)#*B(_ zS$|E@o8!)XnS+zq-2kqWYJHV|-3$_u<7$ZUH6}P5W|Ou`KDGd7T3SOatFhb_WP=LgxddlASVJ7D zao81TkCdK^aHe}T#Qho%TtSXWV;Rmgsiv4*b4pD;bL8Qy)EDARD{G3+Yp(Jz+e|xa zid{8#yUdqWN?D6>rt>w$g_;*#?q8KVYdOx;`#I6)xxUYN&Ko4#(?m$;(m_pT4%77K z#KPwm5%wQ9bF7g(+`uspFu9LI?h}V&72(fZ;5_B(#^b`Kd1pqS=I^S}r);g<7Spch z#Msywv3lJzRG5~=iDhxi<6PV8u*y z9IL2b%H75#=|Oo^ud6xQ)9NbQoRMwy^vRc^PpK)lbyUadsoNP@{z}x4})9dQt3u3^F17G}m*A@3ROxilux3gW1 zx_2Y}YE<)6*EfHlVxE2t8Xog{Ib%)Rtq19~GVeuk@ulxya@E4Em&GqH|N63PyU#14 z?<*g@qHmMk-R|q!rctkm(XWib`FHLzdNmwn?fOqw!yj7!a4YF4rCBX`1PFJ#nYr-E0nLoMH9F@cJX_JM%W&+nLU1 z^~L=93$i(!aW>W$o9b^iT$*;;^w`OQcB;NOUH^Ap%~F{WJ700CTG8Qr!8(MmNZ=Ia?jOg9A+tX_fFg0Q0!^A7w6x(>pW$)(X?g% z!EEE+oBo42Cbvbq+EC1S?d#X{`kHj~ekklTGaH+lZi+O6~w?<-h<6VtiHL$OV*x%$p6W8|H zCgNO^^Nww5a<{K5P`qyJm7pP?~ZE?J~+VomeS4}*8TReKZXEWFKkY-|Nvtf>H zviy;+y5Mw9CzG3rDb1$h{5$s*y()%2^{(d=PK5u!5cSx_2u1y6GjaQ!JMXxP_EK|k zx%rjmuI;7l7Gqlc14@1p_bvbQIq;LO5ubi35>cZ` zdE-)~MH(Yhi}%#oaK4Jv%8C}^r-Yjcu3C7MD0(LKN^)%vO%lVBhC8AL-; zO-T|{lcwSPJ9hx%eClV}&rpL+!%b>@`rPxLrTcuLk4}GV8vmVo`FGdwRM1yR;!exK z$*u~S+Dc4oHNBNdC$Pe>6HQzoUjwm(Y|^HUZ$wki5+&g(wy%M|fd%GcQ(#`TzX zAVnNZIplKnaW1!O*Hgrel%KLWoN+#GEBdz`&{j{EbS5~j`?MKt#iwm&W^*{>eAQNb z-S!)oYmsxAUOU`Y9BF$ro5LCBMqBYy+nX-edgoHTHn5!-)NXJ)X9kqR8Rye>VrIKp zF4qC)a=o^uomks$T{ed^&XIQFXuD%B*ROuYb*%PtJ8`SsFWDTKWb-cX! zV0&?>{o(A^Nb{BU;%fVAE^8eXwxqdN2a(yKcL!%`y0x77lMZ5RhjCcFg-=>C&zh!Z z2+4z}JbWrO2Wwsq_VRJCkHx_jt4V+A)AG8Mc`G~g>r=R3OX?{dTT>(p^Ii+&c4Pap zTxpU%cjYH0hkvE%Q%zbnnfe;{%0AORGE4t&wZoe9zoYdv3$s~k#OPB!C^RwD9v&P0 z^7374DH+r@G|rG%vq@X5{vlZPxZu#trope-?TVu9!MW?G(=F>W*6{F<@W8TF z^M{8!WT_~ZtQ6ytZUIV^d$wl1MoB5k$78330z(Q0=81?R>1V(nKS3EGXxW#1w7DQR*OZ4b9= z_w^?THR;%_X!*d9Qu#}T6bmdLSTeA%#XK-g%t~9E zCQN?9+%h2}K}eq@$Fs@8IKC&4UQe0me<%=_OJ2i`sC3U<&H zEZS(8*4p_4tiN3s*<>fITGHb4Lc3j?{kB zD?!TWcZ0OMx(<@u=<-&hq{UiX6?DG9z~X_=6tS33y(fNo@1yqxoy3%$C`?`{9a<*8 zFEsB|e%YJRMl)N|yCgdLlV&9B6YMC`h>8xb{ejBBFjms+!M5r_y@Tl~vGxLy!9i{9 z;kCkT_V73(8&Zan52h|hVObgb^YT!;wOV0jfWUGQfu#e(a;y3bw^E<8> zxN&p{l-`8%83|XcrV?Jta%FT(P}AU`Xj^h{E&UjasQnfyTGAS5F<|tlm0n@5Ngs&GA58hckqa+Pw-)nS_JLUb!3vi(ScNU&we4+r}f$IZggj^H=@Po_L^EXe2!| z${rdSS0}D6k`Ji_K9?&hS9D;7Kz@G`_$-6F{*P%}ee{18?_WL;zkYE0_fouWq{ssJ zpg7Mx2U@(p|CjjTUzh&nIC5_-UQ$nqDqL{U3e~(9bQcS|FY4~}Hlr0s>*og6z>u)g zR`2cI#g6VfUH(oosI4BiocERP;%fJ6E>F4)R;iPF@4h|6M?L!WaPIR%$-}F-EY>iK z_mm!DYL96yUqAgOe7N_QJ;YZ%zVX??{IJ#Tv=)U;O z9_d@gX0r`!muehiMQh%?dF^p^XpR=|&xyFMmt3#nJEFa&_hj$eSnl+ace5P#D1>;j z8D6xg_pnSUhG)tVkRHuP3z2s9yQo|ii_b!=i!$ZnEN7V7=QBRrvFyl{J3SnQea>UK zkSQ-_If|jOi`KC%xrZ$i#ofSc=j|tH2>g+oPl7?&jNcM*M(eCZ(ik+kAazoU<1X4J}?^;|ayTl$_aT-? zePz#&T)Wa85x$>b8T*kOm*ps@s;sc@Vk}EOl1n`t#eBD7+4hm#p5=&AF^c(~#d7W= zdEUcO+V?(|2Or7bvK%pvG)DE4Vst+_1~Lv%cNFtofMsDnxhTsKr(zWG-HheiesYV4 zqqy%WET{X)Gs?k#M?><}>bf^1y)|Wh*;M0-e^TQrQ`Bb7RlY8DKh)Z-jLzWaBpy#zDb|a?wn+L-d}Ax znxSF!XpN;pL(3HoEgKqIF~ayRP5Ufg#Ia%Vok~j6`pfAmLC;pIR;7G3F49j zR?rOBmuj~9W?e@YaJAh?rK-5Tq8!TNJA8l?;|9nXkbZa;xAts#gtg~D*=wN7>1fZE ziC88Ll#@Lig)J+vtQ;sm&vF!3?VzY-7na=v(j7W4SO$Ui5Gj zxBQ0X;UM`a%b~aD!j>_E8UF^$v5=7~-BHZ42+QKZa*1;A-_f2e+1s<;fFJvM!eFU4 zWqrh~P%_#WJM~6Qd$w#LiCu%`?yM}hw`a@JA(X-pxg0Wb=-!?!d$I2uBKK#xv$f}F zHGVqVud(4~@@UJBR_qvGL(7GRRx7Fo+sLp`N0YW#Zjj7RL*z}BnrCC)gu#-nG3%}O z316NAvEGhtstH$BU%HA4v{+6KWi%ZsZ$SE?`?)n{za7IEgNMmokl}PRX1_~VE)SDe zJRF7nGKWjid${Za88P(6T*z+%mWjjVBo9Y~-*PM~hRc=8!GA|1@cR?9qu)-V?jJ4> zWbN90cJv!MLW*G{s`w!2KemjY@YlPgb;(AsUv!mZ1m>vE4 zk7RZpDaS*4_Wa!{z<(#!T_ff0ET^La{4Zm9u)QBL*r2>)GJc8`*KJRBwczsK^!D0wN%5v5{;`}Z8p_%m8& zLPp}cqlEuBEaOMZ30V$(Gzs%xie=eox!l81)PFmc9i!#WEJv&(jq_M8jFuNY93}jJ z!}4&ne3a#QS;YwRA2WvWXN(*R8M)FOMg13HSv*EA$#T5vNMj3@tz+ai4@U|AGg!`! zk>`|y|BlA$&lOF!Q#t*7?kQhSoQw6bOCPp$l{Gc%s$!`a{WQ@39?ACnME3f`bs!zx zW@Z07*zbNK?`65Wy3NY|pN!=!XsjFu8O6|t2a`R|16|{oepdM8Eyv9L__(H~XGXNp zN=4PgthSiAjhWkRt9)pvt(e7sB^mjAtX!q?4TlFvSxE#RSUHEZyrbQ8YhoHdWi&RIaU4p1#B5l{g0R1Ad{DnorLsFGF|~B zOqNbpbw0Qzojds~*aqoeGvLEU2Xt@ya`$k52pD77f7 z1(?0nC!g8Mr(h1VFP{*H&8!8SA~f!-DVGs(&Ge}b5p7T11EC+GEt6)DEMsQ zV+n5`p)Qp*N7yw4+B#8gQ(;+)GWIPw;&g5}WLx(Q(CU#xds|ivqt%UoXj@cJd}LcL zZ6dk8(KldadqtVB7|G-@=QI18%lVtj=-?%S$bV{^9J*og&4CDRLu3W&Ydj%*@J;qcy0M3aZw# zYAPo~Q{{fhWcJtz?N1A!jl|MwpHE9m=;~;N%Z!}`*;&G88A`8rwZi~&WF4}v1^mX| zrc9Glr)96!toCKHIA6-4UUW!DTd$TF>}i=%6j&r}Dk$D)b9#fLg;h>VjKrtkw^EI{ zDAh+v(U@py75vSm{LOkxQ%wusGv-Rp#d78ZC$cLqQg7H2WAp@GHv`=WA%sMD* z@Z3pq?`0>{>IIkYG2^Su(;Ia$pAuFIOC8y<>0Fdfmpy0b#pR49jbCKfP2pCQ$tM+R zn4H0Q!fvJJxN%hUT`6sENKpV=$Gt3&`&3z$#R`)A1WDhGbT)QLuDagJt{Fu8`aNR$exYD-DhCwe?tJz0=@|$z;DU{P};giQ<`!_CgL4R|8e{-Hnh57O) zW z%3Yt_dWsfngvELm`?=ZjymIsNR#ppXpvE00$J=knvz5sx*uEjw7S$WXg*tjdZnNqF zYN(|&G;6Opj8JprScoCPv8U{9vqP8mdMnlUSX>5I|H2+?tDMP~UI4kxh0LWH6wQU% z+je$yX^y)li@wrWxAFVWuCR#|-+`zvgImab{8 z#{S05m16Z=`32-UPCw^focoBA!7*9Ut<|hA#73P6Iba{ ztOc#5tj`j4#ylyO&yy=4SEAXYzWJo6Rfu|$IM?UN8!D>f09(pnT8s04lv6k?j%L6> zgMql|%UNubS9NbB8G!1WSgm;eLus{4vK2mN@W|CAk za%j0_a5u)u=%@ja10tj29SP^rPdcpTU^Cqy$He)pq0E=lAr(=*GnR-&WU$RngO9Jw z7^{ylIn8-1M5`{PJ;h7 zM=jM^`RL~xQQhpJoOi?oMMo)vzPnuJT;{wKJ3GyzMhLc;AIfr2zp>-t3+0G~?BB<2 z|7yC_6EK?+)XBw2oUfuij)Waa zQueyga(qXEy%x#LMWkzT%&RI5y%splr}}JBYS8Csq8(j@sA2w$e+)l)`Jz6EdwP*P zqjsSp=G4Naom*Gx!%=gehuc%!pvpORF=v2_<#@;lm_wcT7Rk8|%lgG~gNLJh&SO}P zFP0~=9Jy7DDmj0~a%-{t#lsPobI=kg1}~9AAR~=X6(fJnnOJ5mk+VG<#dCgxWz7<~ z)^PZ0C;1f*cSSP-h-cw7Vu$e@St5@b0kFzD=(|hgJ>6t1Odm4!(uA*eNyQFn8PwGI zseLVWKr_%ZX+)I)RbvP6OMgEZ&He1)FKoPy%QR2sh<$tDhygZx5?|HZsrPaDCabi$ z(_#&?7UtXYm0bBMy8XQW@fUFoT*?iYrScO<6@tp~yk$~+woJ~4lu4WEe3nUmjp>_Z za*eykcqm66#&~3zJZkuSwLae2%jRc1x0cCYi~uU7QOj9*UM|N#uDd@**$h>&|If=N z`l&E9Gk4WHg`SrjJzfS)z85t%%yYHJ_+N znuz|C?^7F4jA}qh$6Rlq@@@6+o07*%s8nO}d|prtK?PPl)cFI ztDXE`7MaJ}pj450z6Ar1_4&9K zd@UCmAyk3wLht@s?$J#~8@sHHHWPiWik>?$dx0%*>zR?NXI4>Py3*7ucb?iuvkmgU zUt&*qHIgd4>@P+-L$1$$Ew8y9&*U{+-mZ~TA-(7>xn8%h1k=(ra+$lwS#;Ym?%)UP zhR;{q7N8ehH)qLxkLQOq@{$oimE6Z`IpbO@2SBc-_KkK)HMK)3_U|^e%KE^jen0YG zDm0IG6{+&d{-&Y{IDHoVpAK%1 zy|!mC_tA!IlH(v}J6N}wGvCc}1EiPRkFGb69KdvNvpnSPahBVU7_V=ZHw>Szwkwxj zZmv_-0pCh7@LM?ua;Eeddj7X^fo?Ji%s4GOs$yrGK(D!tZ2zlM*6i=e`G$P0`BrXo z%kg(xq&T@no`UqU86D_sQ#UaEv_;-@_c+UDz*Y`@s~iNWSZ0&2wv%UcIiatUbz-K! zeqX(zV@*v%2On{378K4bnT?dhrK_pX^`HoOrK+3wOy`u zd4093nqFLPolt+H#6f}_+Aa?pAysibLigMud+l&0>#N;Sk)K*fw51jv7d%fnk9ca) zaOvYQBI$2w7(pIJ?vSI5tf<^g+R6FPPB{fK3gt7`5BC>iT(VOx&F*s+$_~sscgkHZ zudmkI>xqSOnIKno%Bx05mF%cpT>tEnV<2Y(9I7IFo;|oX9>+O@dX2>&E1mF?Pe04j z-=^TvZuBCWO^)X5l5>rWsl2Y;&9iO0<$A~{qK(e$LeqYX2X@PY*?rC;x{mqAZuyhT z>&s7F^dfQ&LZ-oc81DASp^)0SN^dcG$sW1XFsWWOOU3$+$|l=c)E_F5>~ELYKrS}! zk(=D|w`VW?f3MsJ8Rc=pc`ax)m2yKDK_~-cX*(EV(*&M4orc z?<3wE)$^F_bOfGhLeYNe5wU7?RWtO%B-_B!l zmk~sj&vo>TWAZ1rSO@>@;)i}x;!!Gpthac~u?!ZO$9cx;xavQ)$^Jiz+h*D3VVf9~Vs{-=;eRluvxC;7C4uqUVH2oy~{iOU9GJ4Wf=K_Yd z0^`b)^7HIIXA$kiyzivk@ACR;y&Q`e&MR^4I=&kx6|QS7JWD9G9W20v-- z;<2*%y_w~A3*_+=GaAiI@-gd_oNZ)B<#73Fp1eCPS3*XKY;>+mXy0Poa$0W9?sJyN zIn3uz%L^{AuQuMXHsP9KdYxesIwN~S&Kmd>J@bs5Wthy&%ro^hiT|XvWa~V?TO^Nn zqR+|2sxxx6TmCklm15IbxfwFbeW5 ze$7lx{F?fz-%O~VV;0~SWW&!%G2)yY2^mFWUV~nHPOej?Qv3;-ZT!`km7p~G8hjX( zLFeF4$=pMiMHfRq1InSJVH+rqZUDasDxg#0w?Rd8f4D2Cg#HvB1GvBBotr;QGl0KO z!>u##qUa)k+gjdHa3xR~-2i?bR6(!duh>)uRnfcQ9iSTe6np|ai?;CRC2ymn(J6sK z9B12(?uvdF#Gw1bAA#!VW$-jm105VJMBgAGYN8|1g~4;^NVp<+9^DMC17gv;bF&W+ zhdu?L0JYH9;j5rF+K<0%`2hU_`u#kFVf#h&$LPM`CG=Q$GY}T{QJ^0BHMkb2k6xRfFrWc?54;mJM4yJg1Fxd}LWQ`4ehuCI8Npv`5uy=# zFnR!Z9X$yi4;rIa!Sg^9bjgB3@CRMQ8|Z52%HU1(OK@%Q7P>jy7{sIBhf_gQ^ia4j zcpE(jo(P(u*T5^lJLn_u4$vHZ9liispnVHbhUf%z7&-(bqN~AW0k@jH8^EPaN2f7pdCioCN67CLqqUXa?K`-ghFtlGW{;(7njxGV`1tZYO#f7+z9*ORPP6MORec?z!mokN=#>nRHNdy%&F}`W1$_wK z54NIzhR=a*=$Fa}vAeVo+tF{L8-pF_HgGc7iS7$`0lU!0%2G#QH~KRCJ=lZ32j2#J z(Z$ON5d`+3Gs^Q!20#5^n(5EUe4uiw!>+n@@1pNqp0FI)| zRHS~vF?5$oLi~(Aj_!-j1Sim=;Su0F^ip^_IEl^^NjtJpm+0c?2yhx*1&#z~(2d|Y za27p0ig^T_Lr;SzgY)Pm@Ir6_y$${bTtr`h4}gg+FF&xOK=|@0f&MI z=#JIM8~Qi&T=a185WN~+2_B&j!JC2LIa~QGWsH{SQRwG^2_0Z(T#x2S0QAe~a=?u4 zr0l>8&CA0@ci@d)1@PM9SlmM zYrvI2DfAm~eNYr;L0R;4cpNB)J`aBm%A>Vd+Aq2SIvgDgDx%+kZJ-i* zI^11tqu0PoK_vPJyc)=)3Mf5RvFL(+4Gkh7mj1G8#{sdk@7lR9cI_Mg3 zWl$IW23#N1LwAB(t8H|DxF=|Uo(_)#4bfl1OTnw?VlOf$pkG7RLRSWj&`I#?3h2FX zI%tfp`4Zz6x(WJibOZ1Px(l2N-b4?9`+~R7v*F1g9=#U+95h9nUS>W)zl|<}4g$^4 z&%u?zJLrGG4MB7CT6h9zf&LEO0}{}@HCbE(iRhfKFs^_kbV)c2v_wA-R|CoDc=%P& z3Y`wO1+CG8;NGAOdL}#(q@cfnSAe$Y!|*Q94t)du9;Bizb!Z!)JvtoD4?3XjunlxX zzYf;{ozU&!mY_5G3Y-bj(0+9po6+g$Qs_{SfnE(i3%a1~^_W-D@1kEv*8%ULcf*6g z`{;-8_n<4z}LVqbj~K! z7Z{Fy3620G&>z5WgOTWo@IWvMy$+raMx$@Q2f-M0!#5byz$fS}aBnac?f)j@26`Mi z3jGWikFE#T0u#`!;AUVV`a}3#FbO>t9ttL-m%wwt6!bQD9hi!~0v`j@&=2AJU^;rz zTg*RT26{2P0DOwx2CoG((Y$q390Rk^KJlDKpl72)(Rslf^lCT?%th~jw}N@-i|`5X z8QRp8xaj%l(&!+t09_r91`E+w;Wxk{^dtBISd7m9Hghsqg02jg0!z`&;M!mrx)a5i+rV#wRcPMVDc%RG(KBFP(J8(_H+hG1eDs&-6m%=_ z6}mUvRr%0U;E~`P^g4JESc5(Q?*(ho!<#eLqt~H7MNb3k(ci$!!3Oj(co*1+=B1Xr z>XLqi&e4MN7qA(<4lW74MIV6of-UGD;qzcC+Ao1~G4wWcS#&7aj;;yEfF0-u@LOOf zI%gv1L|_-X6dVS2qie&@f<5T=aAU9+-4pH(_MxMaXs77?=oitozyWju{02CP?hbbb zhtQMZ!Qe1@3A_*-K{sqk9??h9N$3{f7`i*04vwS8!GpmG^agk?_zryt-VaWqKS<_$ z8GQ;p1U(R(M$dyMgEQzY@E71L`X+n?oI`uH;+zzmM-PKTzycbx4>_L-_Xb5Bj6$WHhcvt^|V6DR2W2jQ$tg z734;TbYz}EhoDQMi-A1oT5vUx7o7;d4)USTj6U!o*cTp-(*nPY(+_?G`@<^;6ac3Z z$O_+tbHF_aoDW diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll index 10b5d98d5fad634730375b3da0c5a3c58207f3ab..ad3f04827de336f237615fbba44b7cd961f524e5 100755 GIT binary patch delta 13609 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 delta 13352 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 E3kkQBZvX%Q From 40796b3f4c60550c49e881c28447d3fc10f40101 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 18 Jan 2016 11:45:13 +0800 Subject: [PATCH 34/76] update comment in csharp test --- .../csharp/SwaggerClientTest/TestApiClient.cs | 4 +++- .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 34893 -> 34893 bytes 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index af7c22ba0880..9d1921d8ea7c 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -123,7 +123,7 @@ namespace SwaggerClientTest.TestApiClient PetApi p3 = new PetApi (c1); ApiClient a1 = new ApiClient(); - Configuration c2 = new Configuration (a1); // using default ApiClient + Configuration c2 = new Configuration (a1); // using "a1" as the ApiClient PetApi p4 = new PetApi (c2); @@ -131,9 +131,11 @@ namespace SwaggerClientTest.TestApiClient Assert.AreSame(p1.Configuration.ApiClient, p2.Configuration.ApiClient); Assert.AreSame(p1.Configuration.ApiClient, Configuration.Default.ApiClient); + // ensure both using the same default ApiClient Assert.AreSame(p3.Configuration.ApiClient, c1.ApiClient); Assert.AreSame(p3.Configuration.ApiClient, Configuration.Default.ApiClient); + // ensure it's not using the default ApiClient Assert.AreSame(p4.Configuration.ApiClient, c2.ApiClient); Assert.AreNotSame(p4.Configuration.ApiClient, Configuration.Default.ApiClient); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 5008263b22310a03e46f36026133deea88a58324..9fd5b3c6f762ed5964c1fb0d75bf5f4fdd4c8a16 100644 GIT binary patch delta 50 zcmV-20L}l+kOIw+0 Date: Mon, 18 Jan 2016 21:27:29 +0800 Subject: [PATCH 35/76] update tostring to use sanitizeforserialization --- .../src/main/resources/php/ApiClient.mustache | 2 +- .../main/resources/php/ObjectSerializer.mustache | 16 ++++++++-------- .../src/main/resources/php/api.mustache | 4 ++-- .../src/main/resources/php/model.mustache | 4 ++-- .../php/SwaggerClient-php/lib/Api/PetApi.php | 16 ++++++++-------- .../php/SwaggerClient-php/lib/Api/StoreApi.php | 12 ++++++------ .../php/SwaggerClient-php/lib/Api/UserApi.php | 8 ++++---- .../php/SwaggerClient-php/lib/ApiClient.php | 2 +- .../php/SwaggerClient-php/lib/Model/Category.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/Order.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/Pet.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/Tag.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/User.php | 4 ++-- .../SwaggerClient-php/lib/ObjectSerializer.php | 16 ++++++++-------- .../php/SwaggerClient-php/tests/OrderApiTest.php | 9 +++------ 15 files changed, 53 insertions(+), 56 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache index defea63b1384..a0a0b8fcf594 100644 --- a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache @@ -150,7 +150,7 @@ class ApiClient if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { $postData = http_build_query($postData); } elseif ((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)); + $postData = json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($postData)); } $url = $this->config->getHost() . $resourcePath; diff --git a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache index 6cc2206b4551..263ade673a0d 100644 --- a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache @@ -46,13 +46,13 @@ class ObjectSerializer { /** - * Build a JSON POST object + * Serialize data * * @param mixed $data the data to serialize * * @return string serialized form of $data */ - public function sanitizeForSerialization($data) + public static function sanitizeForSerialization($data) { if (is_scalar($data) || null === $data) { $sanitized = $data; @@ -60,7 +60,7 @@ class ObjectSerializer $sanitized = $data->format(\DateTime::ISO8601); } elseif (is_array($data)) { foreach ($data as $property => $value) { - $data[$property] = $this->sanitizeForSerialization($value); + $data[$property] = self::sanitizeForSerialization($value); } $sanitized = $data; } elseif (is_object($data)) { @@ -68,7 +68,7 @@ class ObjectSerializer foreach (array_keys($data::$swaggerTypes) as $property) { $getter = $data::$getters[$property]; if ($data->$getter() !== null) { - $values[$data::$attributeMap[$property]] = $this->sanitizeForSerialization($data->$getter()); + $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } $sanitized = $values; @@ -220,7 +220,7 @@ class ObjectSerializer * * @return object an instance of $class */ - public function deserialize($data, $class, $httpHeaders=null) + public static function deserialize($data, $class, $httpHeaders=null) { if (null === $data) { $deserialized = null; @@ -231,14 +231,14 @@ class ObjectSerializer $subClass_array = explode(',', $inner, 2); $subClass = $subClass_array[1]; foreach ($data as $key => $value) { - $deserialized[$key] = $this->deserialize($value, $subClass); + $deserialized[$key] = self::deserialize($value, $subClass); } } } elseif (strcasecmp(substr($class, -2), '[]') == 0) { $subClass = substr($class, 0, -2); $values = array(); foreach ($data as $key => $value) { - $values[] = $this->deserialize($value, $subClass); + $values[] = self::deserialize($value, $subClass); } $deserialized = $values; } elseif ($class === 'ByteArray') { // byte array @@ -270,7 +270,7 @@ class ObjectSerializer $propertyValue = $data->{$instance::$attributeMap[$property]}; if (isset($propertyValue)) { - $instance->$propertySetter($this->deserialize($propertyValue, $type)); + $instance->$propertySetter(self::deserialize($propertyValue, $type)); } } $deserialized = $instance; diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index 6d1a3d570f7c..d21301ee387c 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -223,14 +223,14 @@ use \{{invokerPackage}}\ObjectSerializer; return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '{{returnType}}', $httpHeader), $statusCode, $httpHeader); + return array(\{{invokerPackage}}\ObjectSerializer::deserialize($response, '{{returnType}}', $httpHeader), $statusCode, $httpHeader); {{/returnType}}{{^returnType}} return array(null, $statusCode, $httpHeader); {{/returnType}} } catch (ApiException $e) { switch ($e->getCode()) { {{#responses}}{{#dataType}} {{^isWildcard}}case {{code}}:{{/isWildcard}}{{#isWildcard}}default:{{/isWildcard}} - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '{{dataType}}', $e->getResponseHeaders()); + $data = \{{invokerPackage}}\ObjectSerializer::deserialize($e->getResponseBody(), '{{dataType}}', $e->getResponseHeaders()); $e->setResponseObject($data); break;{{/dataType}}{{/responses}} } diff --git a/modules/swagger-codegen/src/main/resources/php/model.mustache b/modules/swagger-codegen/src/main/resources/php/model.mustache index 5b486c7fa62b..75cf55bde0b0 100644 --- a/modules/swagger-codegen/src/main/resources/php/model.mustache +++ b/modules/swagger-codegen/src/main/resources/php/model.mustache @@ -176,9 +176,9 @@ class {{classname}} implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($this)); } } } 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 66e8f34df094..ed06acb525e8 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php @@ -341,12 +341,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -437,12 +437,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -539,12 +539,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Pet', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Pet', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -961,12 +961,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, 'ByteArray', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, 'ByteArray', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), 'ByteArray', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), 'ByteArray', $e->getResponseHeaders()); $e->setResponseObject($data); break; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php index 2874d8f47aca..0f67fa63d157 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php @@ -165,12 +165,12 @@ class StoreApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, 'map[string,int]', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, 'map[string,int]', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), 'map[string,int]', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), 'map[string,int]', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -252,12 +252,12 @@ class StoreApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -347,12 +347,12 @@ class StoreApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); $e->setResponseObject($data); break; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php index b63b679aba12..595d82fffc1c 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php @@ -407,12 +407,12 @@ class UserApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, 'string', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, 'string', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), 'string', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), 'string', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -575,12 +575,12 @@ class UserApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\User', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\User', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\User', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\User', $e->getResponseHeaders()); $e->setResponseObject($data); break; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php index 310a0bdc7263..8313dc520043 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php @@ -150,7 +150,7 @@ class ApiClient if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { $postData = http_build_query($postData); } elseif ((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)); + $postData = json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($postData)); } $url = $this->config->getHost() . $resourcePath; diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php index ae4d3e39db0a..723617198b5d 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php @@ -198,9 +198,9 @@ class Category implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php index c9f2629e31bc..f2540992e2df 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php @@ -329,9 +329,9 @@ class Order implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php index 543041b01150..aa8c6d67a8f5 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php @@ -329,9 +329,9 @@ class Pet implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php index 91bfa6aece96..7288e39eff93 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php @@ -198,9 +198,9 @@ class Tag implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php index 8268f6da2b1e..7de225ec7442 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php @@ -390,9 +390,9 @@ class User implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index 1a5a46d41283..9ee2f3c12174 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -46,13 +46,13 @@ class ObjectSerializer { /** - * Build a JSON POST object + * Serialize data * * @param mixed $data the data to serialize * * @return string serialized form of $data */ - public function sanitizeForSerialization($data) + public static function sanitizeForSerialization($data) { if (is_scalar($data) || null === $data) { $sanitized = $data; @@ -60,7 +60,7 @@ class ObjectSerializer $sanitized = $data->format(\DateTime::ISO8601); } elseif (is_array($data)) { foreach ($data as $property => $value) { - $data[$property] = $this->sanitizeForSerialization($value); + $data[$property] = self::sanitizeForSerialization($value); } $sanitized = $data; } elseif (is_object($data)) { @@ -68,7 +68,7 @@ class ObjectSerializer foreach (array_keys($data::$swaggerTypes) as $property) { $getter = $data::$getters[$property]; if ($data->$getter() !== null) { - $values[$data::$attributeMap[$property]] = $this->sanitizeForSerialization($data->$getter()); + $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } $sanitized = $values; @@ -220,7 +220,7 @@ class ObjectSerializer * * @return object an instance of $class */ - public function deserialize($data, $class, $httpHeaders=null) + public static function deserialize($data, $class, $httpHeaders=null) { if (null === $data) { $deserialized = null; @@ -231,14 +231,14 @@ class ObjectSerializer $subClass_array = explode(',', $inner, 2); $subClass = $subClass_array[1]; foreach ($data as $key => $value) { - $deserialized[$key] = $this->deserialize($value, $subClass); + $deserialized[$key] = self::deserialize($value, $subClass); } } } elseif (strcasecmp(substr($class, -2), '[]') == 0) { $subClass = substr($class, 0, -2); $values = array(); foreach ($data as $key => $value) { - $values[] = $this->deserialize($value, $subClass); + $values[] = self::deserialize($value, $subClass); } $deserialized = $values; } elseif ($class === 'ByteArray') { // byte array @@ -270,7 +270,7 @@ class ObjectSerializer $propertyValue = $data->{$instance::$attributeMap[$property]}; if (isset($propertyValue)) { - $instance->$propertySetter($this->deserialize($propertyValue, $type)); + $instance->$propertySetter(self::deserialize($propertyValue, $type)); } } $deserialized = $instance; diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php index f92cc83c6930..51b82a695d68 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php @@ -45,8 +45,7 @@ class OrderApiTest extends \PHPUnit_Framework_TestCase "complete": false } ORDER; - $serializer = new Swagger\Client\ObjectSerializer; - $order = $serializer->deserialize(json_decode($order_json), 'Swagger\Client\Model\Order'); + $order = \Swagger\Client\ObjectSerializer::deserialize(json_decode($order_json), 'Swagger\Client\Model\Order'); $this->assertInstanceOf('Swagger\Client\Model\Order', $order); $this->assertSame(10, $order->getId()); @@ -70,8 +69,7 @@ ORDER; "complete": false }]] ORDER; - $serializer = new Swagger\Client\ObjectSerializer; - $order = $serializer->deserialize(json_decode($order_json), 'Swagger\Client\Model\Order[][]'); + $order = \Swagger\Client\ObjectSerializer::deserialize(json_decode($order_json), 'Swagger\Client\Model\Order[][]'); $this->assertArrayHasKey(0, $order); $this->assertArrayHasKey(0, $order[0]); @@ -102,8 +100,7 @@ ORDER; } } ORDER; - $serializer = new Swagger\Client\ObjectSerializer; - $order = $serializer->deserialize(json_decode($order_json), 'map[string,map[string,\Swagger\Client\Model\Order]]'); + $order = \Swagger\Client\ObjectSerializer::deserialize(json_decode($order_json), 'map[string,map[string,\Swagger\Client\Model\Order]]'); $this->assertArrayHasKey('test', $order); $this->assertArrayHasKey('test2', $order['test']); From ccd0db443454705de39c712910bfcdc11eba6392 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 18 Jan 2016 21:42:24 +0800 Subject: [PATCH 36/76] fix empty object serialization issue --- .../src/main/resources/php/ObjectSerializer.mustache | 2 +- .../php/SwaggerClient-php/lib/ObjectSerializer.php | 2 +- .../php/SwaggerClient-php/tests/PetApiTest.php | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache index 263ade673a0d..414e40650f6a 100644 --- a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache @@ -71,7 +71,7 @@ class ObjectSerializer $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } - $sanitized = $values; + $sanitized = (object)$values; } else { $sanitized = (string)$data; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index 9ee2f3c12174..a4a1d061185f 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -71,7 +71,7 @@ class ObjectSerializer $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } - $sanitized = $values; + $sanitized = (object)$values; } else { $sanitized = (string)$data; } diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php index dfc459712092..534b9d32c1aa 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php @@ -316,6 +316,16 @@ class PetApiTest extends \PHPUnit_Framework_TestCase $this->assertSame($json['tags'][0]['id'], $pet_id); $this->assertSame($json['tags'][0]['name'], 'test php tag'); } + + // test empty object serialization + public function testEmptyPetSerialization() + { + $new_pet = new Swagger\Client\Model\Pet; + // the empty object should be serialised to {} + $this->assertSame("{}", "$new_pet"); + + } + } ?> From fb1cc254e420999218929e972a824fda35e37108 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 00:51:21 +0800 Subject: [PATCH 37/76] add api test and model test files --- .../io/swagger/codegen/CodegenConfig.java | 16 +++++++ .../io/swagger/codegen/DefaultCodegen.java | 48 +++++++++++++++++++ .../io/swagger/codegen/DefaultGenerator.java | 45 +++++++++++++++++ .../codegen/languages/PhpClientCodegen.java | 19 ++++++++ 4 files changed, 128 insertions(+) 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 a74e652bb6d8..720f2f8aa676 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 @@ -19,10 +19,14 @@ public interface CodegenConfig { Map additionalProperties(); + String testPackage(); + String apiPackage(); String apiFileFolder(); + String apiTestFileFolder(); + String fileSuffix(); String outputFolder(); @@ -33,6 +37,8 @@ public interface CodegenConfig { String modelFileFolder(); + String modelTestFileFolder(); + String modelPackage(); String toApiName(String name); @@ -87,6 +93,10 @@ public interface CodegenConfig { Map modelTemplateFiles(); + Map apiTestTemplateFiles(); + + Map modelTestTemplateFiles(); + Set languageSpecificPrimitives(); void preprocessSwagger(Swagger swagger); @@ -97,6 +107,10 @@ public interface CodegenConfig { String toModelFilename(String name); + String toApiTestFilename(String name); + + String toModelTestFilename(String name); + String toModelImport(String name); String toApiImport(String name); @@ -115,6 +129,8 @@ public interface CodegenConfig { String apiFilename(String templateName, String tag); + String apiTestFilename(String templateName, String tag); + boolean shouldOverwrite(String filename); boolean isSkipOverwrite(); 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 030c22e37944..2d790942cb77 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 @@ -63,8 +63,11 @@ public class DefaultCodegen { protected Set languageSpecificPrimitives = new HashSet(); protected Map importMapping = new HashMap(); protected String modelPackage = "", apiPackage = "", fileSuffix; + protected String testPackage = ""; protected Map apiTemplateFiles = new HashMap(); protected Map modelTemplateFiles = new HashMap(); + protected Map apiTestTemplateFiles = new HashMap(); + protected Map modelTestTemplateFiles = new HashMap(); protected String templateDir; protected String embeddedTemplateDir; protected Map additionalProperties = new HashMap(); @@ -180,6 +183,10 @@ public class DefaultCodegen { return importMapping; } + public String testPackage() { + return testPackage; + } + public String modelPackage() { return modelPackage; } @@ -204,6 +211,14 @@ public class DefaultCodegen { } } + public Map apiTestTemplateFiles() { + return apiTestTemplateFiles; + } + + public Map modelTestTemplateFiles() { + return modelTestTemplateFiles; + } + public Map apiTemplateFiles() { return apiTemplateFiles; } @@ -220,6 +235,14 @@ public class DefaultCodegen { return outputFolder + "/" + modelPackage().replace('.', '/'); } + public String apiTestFileFolder() { + return outputFolder + "/" + testPackage().replace('.', '/'); + } + + public String modelTestFileFolder() { + return outputFolder + "/" + testPackage().replace('.', '/'); + } + public Map additionalProperties() { return additionalProperties; } @@ -270,6 +293,16 @@ public class DefaultCodegen { return toApiName(name); } + /** + * Return the file name of the Api + * + * @param name the file name of the Api + * @return the file name of the Api + */ + public String toApiTestFilename(String name) { + return toApiName(name) + "Test"; + } + /** * Return the variable name in the Api * @@ -290,6 +323,16 @@ public class DefaultCodegen { return initialCaps(name); } + /** + * Return the capitalized file name of the model + * + * @param name the model name + * @return the file name of the model + */ + public String toModelTestFilename(String name) { + return initialCaps(name) + "Test"; + } + /** * Return the operation ID (method name) * @@ -2050,6 +2093,11 @@ public class DefaultCodegen { return apiFileFolder() + '/' + toApiFilename(tag) + suffix; } + public String apiTestFilename(String templateName, String tag) { + String suffix = apiTestTemplateFiles().get(templateName); + return apiTestFileFolder() + '/' + toApiTestFilename(tag) + suffix; + } + public boolean shouldOverwrite(String filename) { return !(skipOverwrite && new File(filename).exists()); } 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 62567a2781cd..4a15853a4129 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 @@ -211,6 +211,28 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { writeToFile(filename, tmpl.execute(models)); files.add(new File(filename)); } + + // to generate model test files + for (String templateName : config.modelTestTemplateFiles().keySet()) { + String suffix = config.modelTestTemplateFiles().get(templateName); + String filename = config.modelTestFileFolder() + File.separator + config.toModelTestFilename(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(getFullTemplateFile(config, 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); } @@ -288,6 +310,29 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { writeToFile(filename, tmpl.execute(operation)); files.add(new File(filename)); } + + for (String templateName : config.apiTestTemplateFiles().keySet()) { + String filename = config.apiTestFilename(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(getFullTemplateFile(config, 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); } 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 0381d09fb739..1046add66ec9 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 @@ -42,9 +42,12 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { outputFolder = "generated-code" + File.separator + "php"; modelTemplateFiles.put("model.mustache", ".php"); apiTemplateFiles.put("api.mustache", ".php"); + modelTestTemplateFiles.put("model_test.mustache", ".php"); + apiTestTemplateFiles.put("api_test.mustache", ".php"); embeddedTemplateDir = templateDir = "php"; apiPackage = invokerPackage + "\\Api"; modelPackage = invokerPackage + "\\Model"; + testPackage = invokerPackage + "\\Tests"; reservedWords = new HashSet( Arrays.asList( @@ -237,6 +240,16 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { return (outputFolder + "/" + toPackagePath(modelPackage, srcBasePath)); } + @Override + public String apiTestFileFolder() { + return (outputFolder + "/" + toPackagePath(testPackage, srcBasePath)); + } + + @Override + public String modelTestFileFolder() { + return (outputFolder + "/" + toPackagePath(testPackage, srcBasePath)); + } + @Override public String getTypeDeclaration(Property p) { if (p instanceof ArrayProperty) { @@ -365,6 +378,12 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { return toModelName(name); } + @Override + public String toModelTestFilename(String name) { + // should be the same as the model name + return toModelName(name) + "Test"; + } + @Override public String toOperationId(String operationId) { // throw exception if method name is empty From 6d010f9af7d825931b616b711be63ca68b66f585 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 10:40:43 +0800 Subject: [PATCH 38/76] fix typo --- .../src/main/resources/csharp/ApiClient.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 3b83a33c8894..4fabfa4667ba 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -61,7 +61,7 @@ namespace {{packageName}}.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + [Obsolete("ApiClient.Default is deprecated, please use 'Configuration.Default.ApiClient' instead.")] public static ApiClient Default; /// From f90bd85a4fa02749268aefbbe55232a4da6e8abb Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 10:42:17 +0800 Subject: [PATCH 39/76] fix typo Configuraiton --- .../src/main/csharp/IO/Swagger/Client/ApiClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 70b17804f65d..9ff8b481e144 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 @@ -61,7 +61,7 @@ namespace IO.Swagger.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + [Obsolete("ApiClient.Default is deprecated, please use 'Configuration.Default.ApiClient' instead.")] public static ApiClient Default; /// From 51f2f8c6ad838236172a27055b01f382fb0479ba Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 14:49:32 +0800 Subject: [PATCH 40/76] add test template for php --- .../src/main/resources/php/api_test.mustache | 79 ++++++++ .../main/resources/php/model_test.mustache | 74 ++++++++ .../lib/Tests/CategoryTest.php | 70 +++++++ .../SwaggerClient-php/lib/Tests/OrderTest.php | 70 +++++++ .../lib/Tests/PetApiTest.php | 178 ++++++++++++++++++ .../SwaggerClient-php/lib/Tests/PetTest.php | 70 +++++++ .../lib/Tests/StoreApiTest.php | 112 +++++++++++ .../SwaggerClient-php/lib/Tests/TagTest.php | 70 +++++++ .../lib/Tests/UserApiTest.php | 156 +++++++++++++++ .../SwaggerClient-php/lib/Tests/UserTest.php | 70 +++++++ 10 files changed, 949 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/php/api_test.mustache create mode 100644 modules/swagger-codegen/src/main/resources/php/model_test.mustache create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/CategoryTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/OrderTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/TagTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserTest.php diff --git a/modules/swagger-codegen/src/main/resources/php/api_test.mustache b/modules/swagger-codegen/src/main/resources/php/api_test.mustache new file mode 100644 index 000000000000..ee26ec31ff21 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/php/api_test.mustache @@ -0,0 +1,79 @@ + Date: Tue, 19 Jan 2016 19:50:27 +0800 Subject: [PATCH 41/76] add comments --- .../main/java/io/swagger/codegen/DefaultCodegen.java | 12 ++++++++++-- .../java/io/swagger/codegen/DefaultGenerator.java | 1 + .../php/SwaggerClient-php/lib/Tests/PetApiTest.php | 10 ---------- .../php/SwaggerClient-php/lib/Tests/StoreApiTest.php | 4 ---- .../php/SwaggerClient-php/lib/Tests/UserApiTest.php | 8 -------- 5 files changed, 11 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 2d790942cb77..bc2fef9d619a 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 @@ -284,7 +284,7 @@ public class DefaultCodegen { } /** - * Return the file name of the Api + * Return the file name of the Api Test * * @param name the file name of the Api * @return the file name of the Api @@ -314,7 +314,7 @@ public class DefaultCodegen { } /** - * Return the capitalized file name of the model + * Return the capitalized file name of the model test * * @param name the model name * @return the file name of the model @@ -2093,6 +2093,14 @@ public class DefaultCodegen { return apiFileFolder() + '/' + toApiFilename(tag) + suffix; } + /** + * Return the full path and API test file + * + * @param templateName template name + * @param tag tag + * + * @return the API test file name with full path + */ public String apiTestFilename(String templateName, String tag) { String suffix = apiTestTemplateFiles().get(templateName); return apiTestFileFolder() + '/' + toApiTestFilename(tag) + suffix; 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 4a15853a4129..263adc05cf83 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 @@ -311,6 +311,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { files.add(new File(filename)); } + // to generate api test files for (String templateName : config.apiTestTemplateFiles().keySet()) { String filename = config.apiTestFilename(templateName, tag); if (!config.shouldOverwrite(filename) && new File(filename).exists()) { diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php index 75928df30d30..3df47d97be13 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php @@ -72,7 +72,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_updatePet() { - //$body = null } @@ -83,7 +82,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_addPet() { - //$body = null } @@ -94,7 +92,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_findPetsByStatus() { - //$status = null } @@ -105,7 +102,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_findPetsByTags() { - //$tags = null } @@ -116,7 +112,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getPetById() { - //$pet_id } @@ -127,7 +122,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_updatePetWithForm() { - //$pet_id, $name = null, $status = null } @@ -138,7 +132,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_deletePet() { - //$pet_id, $api_key = null } @@ -149,7 +142,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_uploadFile() { - //$pet_id, $additional_metadata = null, $file = null } @@ -160,7 +152,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getPetByIdWithByteArray() { - //$pet_id } @@ -171,7 +162,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_addPetUsingByteArray() { - //$body = null } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php index 14cb5a682908..899f5791c8ad 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php @@ -72,7 +72,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getInventory() { - // } @@ -83,7 +82,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_placeOrder() { - //$body = null } @@ -94,7 +92,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getOrderById() { - //$order_id } @@ -105,7 +102,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_deleteOrder() { - //$order_id } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php index f69ccf8ef7ba..500b99c4c4ff 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php @@ -72,7 +72,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_createUser() { - //$body = null } @@ -83,7 +82,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_createUsersWithArrayInput() { - //$body = null } @@ -94,7 +92,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_createUsersWithListInput() { - //$body = null } @@ -105,7 +102,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_loginUser() { - //$username = null, $password = null } @@ -116,7 +112,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_logoutUser() { - // } @@ -127,7 +122,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getUserByName() { - //$username } @@ -138,7 +132,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_updateUser() { - //$username, $body = null } @@ -149,7 +142,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_deleteUser() { - //$username } From 6efbde5691c7230a65f0d467efb6c35d7800b5b7 Mon Sep 17 00:00:00 2001 From: xhh Date: Tue, 19 Jan 2016 10:46:20 +0800 Subject: [PATCH 42/76] Make JavaScript client work in both Node.js and browser * Replace jQuery with SuperAgent which works in both Node.js and browser * Use UMD pattern (returnExports.js) to make the module exporting compatible with all major systems: AMD, Node.js (CommonJS) and browser * Implement support of header and form parameters. Closes #1736 * Move HTTP requesting code to `ApiClient` and allow customizing options in it, e.g. "basePath" * Update unit tests accordingly and add some tests for `ApiClient` --- .../languages/JavascriptClientCodegen.java | 3 + .../resources/Javascript/ApiClient.mustache | 146 ++ .../main/resources/Javascript/api.mustache | 201 +-- .../main/resources/Javascript/index.mustache | 27 +- .../main/resources/Javascript/model.mustache | 144 +- .../resources/Javascript/package.mustache | 7 +- .../client/petstore/javascript/package.json | 7 +- .../petstore/javascript/src/ApiClient.js | 146 ++ .../petstore/javascript/src/api/PetApi.js | 895 +++++------ .../petstore/javascript/src/api/StoreApi.js | 442 +++--- .../petstore/javascript/src/api/UserApi.js | 775 ++++----- .../client/petstore/javascript/src/index.js | 45 +- .../petstore/javascript/src/model/Category.js | 150 +- .../petstore/javascript/src/model/Order.js | 312 ++-- .../petstore/javascript/src/model/Pet.js | 320 ++-- .../petstore/javascript/src/model/Tag.js | 150 +- .../petstore/javascript/src/model/User.js | 390 ++--- .../petstore/javascript/test/ApiClientTest.js | 69 + .../javascript/test/api/PetApiTest.js | 28 +- .../client/petstore/javascript/test/helper.js | 19 - .../petstore/javascript/test/run_tests.html | 9 +- .../petstore/javascript/test/superagent.js | 1396 +++++++++++++++++ 22 files changed, 3575 insertions(+), 2106 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache create mode 100644 samples/client/petstore/javascript/src/ApiClient.js create mode 100644 samples/client/petstore/javascript/test/ApiClientTest.js delete mode 100644 samples/client/petstore/javascript/test/helper.js create mode 100644 samples/client/petstore/javascript/test/superagent.js diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 94eae2cd94a8..2620efe209de 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -134,6 +134,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo typeMapping.put("double", "Number"); typeMapping.put("number", "Number"); typeMapping.put("DateTime", "Date"); + // binary not supported in JavaScript client right now, using Object as a workaround + typeMapping.put("binary", "Object"); importMapping.clear(); } @@ -206,6 +208,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); supportingFiles.add(new SupportingFile("index.mustache", sourceFolder, "index.js")); + supportingFiles.add(new SupportingFile("ApiClient.mustache", sourceFolder, "ApiClient.js")); } @Override diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache new file mode 100644 index 000000000000..2f85250694d9 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -0,0 +1,146 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['superagent'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('superagent')); + } else { + // Browser globals (root is window) + if (!root.{{moduleName}}) { + root.{{moduleName}} = {}; + } + root.{{moduleName}}.ApiClient = factory(root.superagent); + } +}(this, function(superagent) { + 'use strict'; + + var ApiClient = function ApiClient() { + this.basePath = '{{basePath}}'.replace(/\/+$/, ''); + }; + + ApiClient.prototype.paramToString = function paramToString(param) { + if (param == null) { + // return empty string for null and undefined + return ''; + } else { + return param.toString(); + } + }; + + /** + * Build full URL by appending the given path to base path and replacing + * path parameter placeholders with parameter values. + * NOTE: query parameters are not handled here. + */ + ApiClient.prototype.buildUrl = function buildUrl(path, pathParams) { + if (!path.match(/^\//)) { + path = '/' + path; + } + var url = this.basePath + path; + var _this = this; + url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) { + var value; + if (pathParams.hasOwnProperty(key)) { + value = _this.paramToString(pathParams[key]); + } else { + value = fullMatch; + } + return encodeURIComponent(value); + }); + return url; + }; + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + */ + ApiClient.prototype.isJsonMime = function isJsonMime(mime) { + return Boolean(mime != null && mime.match(/^application\/json(;.*)?$/i)); + }; + + /** + * Choose a MIME from the given MIMEs with JSON preferred, + * i.e. return JSON if included, otherwise return the first one. + */ + ApiClient.prototype.jsonPreferredMime = function jsonPreferredMime(mimes) { + var len = mimes.length; + for (var i = 0; i < len; i++) { + if (this.isJsonMime(mimes[i])) { + return mimes[i]; + } + } + return mimes[0]; + }; + + /** + * Normalize parameters values: + * remove nils, + * keep files and arrays, + * format to string with `paramToString` for other cases. + */ + ApiClient.prototype.normalizeParams = function normalizeParams(params) { + var newParams = {}; + for (var key in params) { + if (params.hasOwnProperty(key) && params[key] != null) { + var value = params[key]; + if (value instanceof Blob || Array.isArray(value)) { + newParams[key] = value; + } else { + newParams[key] = this.paramToString(value); + } + } + } + return newParams; + }; + + ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, + queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, + callback) { + var url = this.buildUrl(path, pathParams); + var request = superagent(httpMethod, url); + + // set query parameters + request.query(this.normalizeParams(queryParams)); + + // set header parameters + request.set(this.normalizeParams(headerParams)); + + var contentType = this.jsonPreferredMime(contentTypes) || 'application/json'; + request.type(contentType); + + if (contentType === 'application/x-www-form-urlencoded') { + request.send(this.normalizeParams(formParams)); + } else if (contentType == 'multipart/form-data') { + var _formParams = this.normalizeParams(formParams); + for (var key in _formParams) { + if (_formParams.hasOwnProperty(key)) { + if (_formParams[key] instanceof Blob) { + // file field + request.attach(key, _formParams[key]); + } else { + request.field(key, _formParams[key]); + } + } + } + } else if (bodyParam) { + request.send(bodyParam); + } + + request.end(function(error, response) { + if (callback) { + var data = response && response.body; + callback(error, data, response); + } + }); + + return request; + }; + + ApiClient.default = new ApiClient(); + + return ApiClient; +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache index 9957fc4e2c51..a61e49125960 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache @@ -1,125 +1,86 @@ -// require files in Node.js environment -var ${{#imports}}, {{import}}{{/imports}}; -if (typeof module === 'object' && module.exports) { - $ = require('jquery');{{#imports}} - {{import}} = require('../model/{{import}}.js');{{/imports}} -} - -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery'{{#imports}}, '{{import}}'{{/imports}}], function(${{#imports}}, {{import}}{{/imports}}) { - return {{classname}}; - }); -} - -var {{classname}} = function {{classname}}() { - var self = this; - {{#operations}} - {{#operation}} - /** - * {{summary}} - * {{notes}} -{{#allParams}} * @param {{=<% %>=}}{<% dataType %>} <%={{ }}=%> {{paramName}} {{description}} -{{/allParams}} * @param {function} callback the callback function - * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} - */ - self.{{nickname}} = function({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}callback) { - var {{localVariablePrefix}}postBody = {{#bodyParam}}{{^isBinary}}JSON.stringify({{paramName}}){{/isBinary}}{{#isBinary}}null{{/isBinary}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; - var {{localVariablePrefix}}postBinaryBody = {{#bodyParam}}{{#isBinary}}{{paramName}}{{/isBinary}}{{^isBinary}}null{{/isBinary}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; - {{#allParams}}{{#required}} - // verify the required parameter '{{paramName}}' is set - if ({{paramName}} == null) { - //throw new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}"); - var errorRequiredMsg = "Missing the required parameter '{{paramName}}' when calling {{nickname}}"; - throw errorRequiredMsg; - } - {{/required}}{{/allParams}} - // create path and map variables - var basePath = '{{basePath}}'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient'{{#imports}}, '../model/{{import}}'{{/imports}}], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'){{#imports}}, require('../model/{{import}}.js'){{/imports}}); + } else { + // Browser globals (root is window) + if (!root.{{moduleName}}) { + root.{{moduleName}} = {}; } - - var {{localVariablePrefix}}path = basePath + replaceAll(replaceAll("{{{path}}}", "\\{format\\}","json"){{#pathParams}} -, "\\{" + "{{baseName}}" + "\\}", encodeURIComponent({{{paramName}}}.toString()){{/pathParams}}); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - {{#queryParams}} - queryParams.{{baseName}} = {{paramName}}; - {{/queryParams}} - {{#headerParams}}if ({{paramName}} != null) - {{localVariablePrefix}}headerParams.put("{{baseName}}", {{paramName}}); - {{/headerParams}} - {{#formParams}}if ({{paramName}} != null) - {{localVariablePrefix}}formParams.put("{{baseName}}", {{paramName}}); - {{/formParams}} - - path += createQueryString(queryParams); - - var options = {type: "{{httpMethod}}", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ - {{#returnType}} - /** - * @returns {{{returnType}}} - */ - {{#returnTypeIsPrimitive}}var myResponse = response;{{/returnTypeIsPrimitive}} - {{^returnTypeIsPrimitive}}var myResponse = new {{{returnType}}}(); - myResponse.constructFromObject(response);{{/returnTypeIsPrimitive}} - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - {{/returnType}}{{^returnType}} - if (callback) { - callback(response, textStatus, jqXHR); - } - {{/returnType}} - }); - - return request; + root.{{moduleName}}.{{classname}} = factory(root.{{moduleName}}.ApiClient{{#imports}}, root.{{moduleName}}.{{import}}{{/imports}}); } - {{/operation}} - {{/operations}} +}(this, function(ApiClient{{#imports}}, {{import}}{{/imports}}) { + 'use strict'; - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } + var {{classname}} = function {{classname}}(apiClient) { + this.apiClient = apiClient || ApiClient.default; - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} + var self = this; + {{#operations}} + {{#operation}} + /** + * {{summary}} + * {{notes}} + {{#allParams}} * @param {{=<% %>=}}{<% dataType %>} <%={{ }}=%> {{paramName}} {{description}} + {{/allParams}} * @param {function} callback the callback function, accepting three arguments: error, data, response{{#returnType}} + * data is of type: {{{returnType}}}{{/returnType}} + */ + self.{{nickname}} = function({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}callback) { + var postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; + {{#allParams}}{{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) { + throw "Missing the required parameter '{{paramName}}' when calling {{nickname}}"; + } + {{/required}}{{/allParams}} -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = {{classname}}; -} + {{=< >=}} + var pathParams = {<#pathParams> + '': <#hasMore>, + }; + var queryParams = {<#queryParams> + '': <#hasMore>, + }; + var headerParams = {<#headerParams> + '': <#hasMore>, + }; + var formParams = {<#formParams> + '': <#hasMore>, + }; + + var contentTypes = [<#consumes>''<#hasMore>, ]; + var accepts = [<#produces>''<#hasMore>, ]; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) {<#returnType><#returnTypeIsPrimitive> + callback(error, data, response);<^returnTypeIsPrimitive><#isListContainer> + // TODO: support deserializing array of models + callback(error, data, response);<^isListContainer> + if (!error && data) { + var result = new <&returnType>(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + }<^returnType> + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '<&path>', '', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + <={{ }}=> + } + {{/operation}} + {{/operations}} + }; + + return {{classname}}; +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/index.mustache b/modules/swagger-codegen/src/main/resources/Javascript/index.mustache index a0207a6cc916..7bb0329fa01f 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/index.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/index.mustache @@ -1,10 +1,17 @@ -if (typeof module === 'object' && module.exports) { - var {{moduleName}} = {}; - {{#models}} - {{moduleName}}.{{importPath}} = require('./model/{{importPath}}.js'); - {{/models}} - {{#apiInfo}}{{#apis}} - {{moduleName}}.{{importPath}} = require('./api/{{importPath}}.js'); - {{/apis}}{{/apiInfo}} - module.exports = {{moduleName}}; -} \ No newline at end of file +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['./ApiClient'{{#models}}, './model/{{importPath}}'{{/models}}{{#apiInfo}}{{#apis}}, './api/{{importPath}}'{{/apis}}{{/apiInfo}}], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('./ApiClient.js'){{#models}}, require('./model/{{importPath}}.js'){{/models}}{{#apiInfo}}{{#apis}}, require('./api/{{importPath}}.js'){{/apis}}{{/apiInfo}}); + } +}(function(ApiClient{{#models}}, {{importPath}}{{/models}}{{#apiInfo}}{{#apis}}, {{importPath}}{{/apis}}{{/apiInfo}}) { + 'use strict'; + + return { + ApiClient: ApiClient{{#models}}, + {{importPath}}: {{importPath}}{{/models}}{{#apiInfo}}{{#apis}}, + {{importPath}}: {{importPath}}{{/apis}}{{/apiInfo}} + }; +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index 0588d03a8c13..9f265c89cf70 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -1,75 +1,79 @@ -// require files in Node.js environment -{{#imports}} -var {{import}};{{/imports}} -if (typeof module === 'object' && module.exports) { - {{#imports}} - {{import}} = require('./{{import}}.js');{{/imports}} -} - -{{#models}}{{#model}} -{{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} -{{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}} - -//export module -if ( typeof define === "function" && define.amd ) { - define('{{classname}}', ['jquery'{{#vars}}{{^isPrimitiveType}}{{^-last}}, {{/-last}}'{{datatypeWithEnum}}'{{/isPrimitiveType}}{{/vars}}], - function(${{#vars}}{{^isPrimitiveType}}{{^-last}}, {{/-last}}{{datatypeWithEnum}}{{/isPrimitiveType}}{{/vars}}) { - return {{classname}}; - }); -} - -{{#description}}/** - * {{description}} - **/{{/description}} -var {{classname}} = function {{classname}}({{#mandatory}}{{this}}{{^-last}}, {{/-last}}{{/mandatory}}) { {{#parent}}/* extends {{{parent}}}*/{{/parent}} - var self = this; - {{#vars}} - /**{{#description}} - * {{{description}}}{{/description}} - * datatype: {{{datatypeWithEnum}}}{{#required}} - * required{{/required}}{{#minimum}} - * minimum: {{minimum}}{{/minimum}}{{#maximum}} - * maximum: {{maximum}}{{/maximum}} - **/ - self.{{name}} = {{#required}}{{name}}{{/required}}{{^required}}{{{defaultValue}}}{{/required}}; - {{/vars}} - - self.constructFromObject = function(data) { - if (!data) { - return; +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined{{#imports}}, './{{import}}'{{/imports}}], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined{{#imports}}, require('./{{import}}.js'){{/imports}}); + } else { + // Browser globals (root is window) + if (!root.{{moduleName}}) { + root.{{moduleName}} = {}; } + factory(root.{{moduleName}}{{#imports}}, root.{{moduleName}}.{{import}}{{/imports}}); + } +}(this, function(module{{#imports}}, {{import}}{{/imports}}) { + 'use strict'; + + {{#models}}{{#model}} + {{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} + {{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}} + + {{#description}}/** + * {{description}} + **/{{/description}} + var {{classname}} = function {{classname}}({{#mandatory}}{{this}}{{^-last}}, {{/-last}}{{/mandatory}}) { {{#parent}}/* extends {{{parent}}}*/{{/parent}} + var self = this; {{#vars}} - self.{{name}}{{{defaultValueWithParam}}} + /**{{#description}} + * {{{description}}}{{/description}} + * datatype: {{{datatypeWithEnum}}}{{#required}} + * required{{/required}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + **/ + self.{{name}} = {{#required}}{{name}}{{/required}}{{^required}}{{{defaultValue}}}{{/required}}; {{/vars}} + + self.constructFromObject = function(data) { + if (!data) { + return; + } + {{#vars}} + self.{{name}}{{{defaultValueWithParam}}} + {{/vars}} + } + + {{#vars}} + /**{{#description}} + * get {{{description}}}{{/description}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + * @return {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> + **/ + self.{{getter}} = function() { + return self.{{name}}; + } + + /**{{#description}} + * set {{{description}}}{{/description}} + * @param {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> {{name}} + **/ + self.{{setter}} = function ({{name}}) { + self.{{name}} = {{name}}; + } + {{/vars}} + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.{{classname}} = {{classname}}; } - {{#vars}} - /**{{#description}} - * get {{{description}}}{{/description}}{{#minimum}} - * minimum: {{minimum}}{{/minimum}}{{#maximum}} - * maximum: {{maximum}}{{/maximum}} - * @return {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> - **/ - self.{{getter}} = function() { - return self.{{name}}; - } - - /**{{#description}} - * set {{{description}}}{{/description}} - * @param {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> {{name}} - **/ - self.{{setter}} = function ({{name}}) { - self.{{name}} = {{name}}; - } - {{/vars}} - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = {{classname}}; -} -{{/model}} -{{/models}} + return {{classname}}; + {{/model}} + {{/models}} +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache index c77ee835709e..1e7650a1ba19 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache @@ -8,13 +8,10 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "jquery": "~2.1.4" + "superagent": "^1.6.1" }, "devDependencies": { "mocha": "~2.3.4", - "expect.js": "~0.3.1", - "mockrequire": "~0.0.5", - "domino": "~1.0.20", - "xmlhttprequest": "~1.8.0" + "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript/package.json b/samples/client/petstore/javascript/package.json index 6810fd633de5..fe470da8b271 100644 --- a/samples/client/petstore/javascript/package.json +++ b/samples/client/petstore/javascript/package.json @@ -8,13 +8,10 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "jquery": "~2.1.4" + "superagent": "^1.6.1" }, "devDependencies": { "mocha": "~2.3.4", - "expect.js": "~0.3.1", - "mockrequire": "~0.0.5", - "domino": "~1.0.20", - "xmlhttprequest": "~1.8.0" + "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js new file mode 100644 index 000000000000..8138225e2b20 --- /dev/null +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -0,0 +1,146 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['superagent'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('superagent')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.ApiClient = factory(root.superagent); + } +}(this, function(superagent) { + 'use strict'; + + var ApiClient = function ApiClient() { + this.basePath = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + }; + + ApiClient.prototype.paramToString = function paramToString(param) { + if (param == null) { + // return empty string for null and undefined + return ''; + } else { + return param.toString(); + } + }; + + /** + * Build full URL by appending the given path to base path and replacing + * path parameter placeholders with parameter values. + * NOTE: query parameters are not handled here. + */ + ApiClient.prototype.buildUrl = function buildUrl(path, pathParams) { + if (!path.match(/^\//)) { + path = '/' + path; + } + var url = this.basePath + path; + var _this = this; + url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) { + var value; + if (pathParams.hasOwnProperty(key)) { + value = _this.paramToString(pathParams[key]); + } else { + value = fullMatch; + } + return encodeURIComponent(value); + }); + return url; + }; + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + */ + ApiClient.prototype.isJsonMime = function isJsonMime(mime) { + return Boolean(mime != null && mime.match(/^application\/json(;.*)?$/i)); + }; + + /** + * Choose a MIME from the given MIMEs with JSON preferred, + * i.e. return JSON if included, otherwise return the first one. + */ + ApiClient.prototype.jsonPreferredMime = function jsonPreferredMime(mimes) { + var len = mimes.length; + for (var i = 0; i < len; i++) { + if (this.isJsonMime(mimes[i])) { + return mimes[i]; + } + } + return mimes[0]; + }; + + /** + * Normalize parameters values: + * remove nils, + * keep files and arrays, + * format to string with `paramToString` for other cases. + */ + ApiClient.prototype.normalizeParams = function normalizeParams(params) { + var newParams = {}; + for (var key in params) { + if (params.hasOwnProperty(key) && params[key] != null) { + var value = params[key]; + if (value instanceof Blob || Array.isArray(value)) { + newParams[key] = value; + } else { + newParams[key] = this.paramToString(value); + } + } + } + return newParams; + }; + + ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, + queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, + callback) { + var url = this.buildUrl(path, pathParams); + var request = superagent(httpMethod, url); + + // set query parameters + request.query(this.normalizeParams(queryParams)); + + // set header parameters + request.set(this.normalizeParams(headerParams)); + + var contentType = this.jsonPreferredMime(contentTypes) || 'application/json'; + request.type(contentType); + + if (contentType === 'application/x-www-form-urlencoded') { + request.send(this.normalizeParams(formParams)); + } else if (contentType == 'multipart/form-data') { + var _formParams = this.normalizeParams(formParams); + for (var key in _formParams) { + if (_formParams.hasOwnProperty(key)) { + if (_formParams[key] instanceof Blob) { + // file field + request.attach(key, _formParams[key]); + } else { + request.field(key, _formParams[key]); + } + } + } + } else if (bodyParam) { + request.send(bodyParam); + } + + request.end(function(error, response) { + if (callback) { + var data = response && response.body; + callback(error, data, response); + } + }); + + return request; + }; + + ApiClient.default = new ApiClient(); + + return ApiClient; +})); diff --git a/samples/client/petstore/javascript/src/api/PetApi.js b/samples/client/petstore/javascript/src/api/PetApi.js index 3b6d9c5b4c62..b6c1163111fa 100644 --- a/samples/client/petstore/javascript/src/api/PetApi.js +++ b/samples/client/petstore/javascript/src/api/PetApi.js @@ -1,527 +1,462 @@ -// require files in Node.js environment -var $, Pet; -if (typeof module === 'object' && module.exports) { - $ = require('jquery'); - Pet = require('../model/Pet.js'); -} +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/Pet'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'), require('../model/Pet.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.PetApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Pet); + } +}(this, function(ApiClient, Pet) { + 'use strict'; -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery', 'Pet'], function($, Pet) { - return PetApi; - }); -} + var PetApi = function PetApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; -var PetApi = function PetApi() { - var self = this; - - - /** - * Update an existing pet - * - * @param {Pet} body Pet object that needs to be added to the store - * @param {function} callback the callback function - * @return void - */ - self.updatePet = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; + var self = this; - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + /** + * Update an existing pet + * + * @param {Pet} body Pet object that needs to be added to the store + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updatePet = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "PUT", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Add a new pet to the store + * + * @param {Pet} body Pet object that needs to be added to the store + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.addPet = function(body, callback) { + var postBody = body; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Add a new pet to the store - * - * @param {Pet} body Pet object that needs to be added to the store - * @param {function} callback the callback function - * @return void - */ - self.addPet = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/pet", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Finds Pets by status + * Multiple status values can be provided with comma seperated strings + * @param {Array} status Status values that need to be considered for filter + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Array + */ + self.findPetsByStatus = function(status, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + 'status': status + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + // TODO: support deserializing array of models + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/findByStatus', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Finds Pets by status - * Multiple status values can be provided with comma seperated strings - * @param {Array} status Status values that need to be considered for filter - * @param {function} callback the callback function - * @return Array - */ - self.findPetsByStatus = function(status, callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/pet/findByStatus", "\\{format\\}","json")); + /** + * Finds Pets by tags + * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + * @param {Array} tags Tags to filter by + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Array + */ + self.findPetsByTags = function(tags, callback) { + var postBody = null; + - var queryParams = {}; - var headerParams = {}; - var formParams = {}; + + var pathParams = { + }; + var queryParams = { + 'tags': tags + }; + var headerParams = { + }; + var formParams = { + }; - - queryParams.status = status; - - - + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ + var handleResponse = null; if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); + handleResponse = function(error, data, response) { + // TODO: support deserializing array of models + callback(error, data, response); + }; } - }); - - request.done(function(response, textStatus, jqXHR){ + + return this.apiClient.callApi( + '/pet/findByTags', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - /** - * @returns Array - */ - - var myResponse = new Array(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - - }); - - return request; - } - - /** - * Finds Pets by tags - * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - * @param {Array} tags Tags to filter by - * @param {function} callback the callback function - * @return Array - */ - self.findPetsByTags = function(tags, callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/pet/findByTags", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - queryParams.tags = tags; - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Find pet by ID + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {Integer} petId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Pet + */ + self.getPetById = function(petId, callback) { + var postBody = null; - /** - * @returns Array - */ - - var myResponse = new Array(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling getPetById"; } - }); - - return request; - } - - /** - * Find pet by ID - * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - * @param {Integer} petId ID of pet that needs to be fetched - * @param {function} callback the callback function - * @return Pet - */ - self.getPetById = function(petId, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetById"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling getPetById"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new Pet(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; + } + + return this.apiClient.callApi( + '/pet/{petId}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Updates a pet in the store with form data + * + * @param {String} petId ID of pet that needs to be updated + * @param {String} name Updated name of the pet + * @param {String} status Updated status of the pet + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updatePetWithForm = function(petId, name, status, callback) { + var postBody = null; - /** - * @returns Pet - */ - - var myResponse = new Pet(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling updatePetWithForm"; } - }); - - return request; - } - - /** - * Updates a pet in the store with form data - * - * @param {String} petId ID of pet that needs to be updated - * @param {String} name Updated name of the pet - * @param {String} status Updated status of the pet - * @param {function} callback the callback function - * @return void - */ - self.updatePetWithForm = function(petId, name, status, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling updatePetWithForm"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling updatePetWithForm"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + 'name': name, + 'status': status + }; + + var contentTypes = ['application/x-www-form-urlencoded']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - if (name != null) - formParams.put("name", name); - if (status != null) - formParams.put("status", status); - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Deletes a pet + * + * @param {Integer} petId Pet id to delete + * @param {String} apiKey + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deletePet = function(petId, apiKey, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling deletePet"; } - }); - - return request; - } - - /** - * Deletes a pet - * - * @param {Integer} petId Pet id to delete - * @param {String} apiKey - * @param {function} callback the callback function - * @return void - */ - self.deletePet = function(petId, apiKey, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling deletePet"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling deletePet"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + 'api_key': apiKey + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - if (apiKey != null) - headerParams.put("api_key", apiKey); - - - - path += createQueryString(queryParams); - - var options = {type: "DELETE", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * uploads an image + * + * @param {Integer} petId ID of pet to update + * @param {String} additionalMetadata Additional data to pass to server + * @param {File} file file to upload + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.uploadFile = function(petId, additionalMetadata, file, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling uploadFile"; } - }); - - return request; - } - - /** - * uploads an image - * - * @param {Integer} petId ID of pet to update - * @param {String} additionalMetadata Additional data to pass to server - * @param {File} file file to upload - * @param {function} callback the callback function - * @return void - */ - self.uploadFile = function(petId, additionalMetadata, file, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling uploadFile"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling uploadFile"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + 'additionalMetadata': additionalMetadata, + 'file': file + }; + + var contentTypes = ['multipart/form-data']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}/uploadImage', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}/uploadImage", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - if (additionalMetadata != null) - formParams.put("additionalMetadata", additionalMetadata); - if (file != null) - formParams.put("file", file); - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {Integer} petId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Object + */ + self.getPetByIdWithByteArray = function(petId, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"; } - }); - - return request; - } - - - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = PetApi; -} + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}?testing_byte_array=true', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param {Object} body Pet object in the form of byte array + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.addPetUsingByteArray = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet?testing_byte_array=true', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + + } + + + }; + + return PetApi; +})); diff --git a/samples/client/petstore/javascript/src/api/StoreApi.js b/samples/client/petstore/javascript/src/api/StoreApi.js index e52a31059645..28928fd40c2a 100644 --- a/samples/client/petstore/javascript/src/api/StoreApi.js +++ b/samples/client/petstore/javascript/src/api/StoreApi.js @@ -1,286 +1,206 @@ -// require files in Node.js environment -var $, Order; -if (typeof module === 'object' && module.exports) { - $ = require('jquery'); - Order = require('../model/Order.js'); -} +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/Order'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'), require('../model/Order.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.StoreApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Order); + } +}(this, function(ApiClient, Order) { + 'use strict'; -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery', 'Order'], function($, Order) { - return StoreApi; - }); -} + var StoreApi = function StoreApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; -var StoreApi = function StoreApi() { - var self = this; - - - /** - * Returns pet inventories by status - * Returns a map of status codes to quantities - * @param {function} callback the callback function - * @return Object - */ - self.getInventory = function(callback) { - var postBody = null; - var postBinaryBody = null; + var self = this; - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + /** + * Returns pet inventories by status + * Returns a map of status codes to quantities + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Object + */ + self.getInventory = function(callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/store/inventory', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/store/inventory", "\\{format\\}","json")); + /** + * Place an order for a pet + * + * @param {Order} body order placed for purchasing the pet + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order + */ + self.placeOrder = function(body, callback) { + var postBody = body; + - var queryParams = {}; - var headerParams = {}; - var formParams = {}; + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; - - - + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ + var handleResponse = null; if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new Order(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; } - }); - - request.done(function(response, textStatus, jqXHR){ + + return this.apiClient.callApi( + '/store/order', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - /** - * @returns Object - */ - var myResponse = response; - - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - - }); - - return request; - } - - /** - * Place an order for a pet - * - * @param {Order} body order placed for purchasing the pet - * @param {function} callback the callback function - * @return Order - */ - self.placeOrder = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/store/order", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param {String} orderId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order + */ + self.getOrderById = function(orderId, callback) { + var postBody = null; - /** - * @returns Order - */ - - var myResponse = new Order(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'orderId' is set + if (orderId == null) { + throw "Missing the required parameter 'orderId' when calling getOrderById"; } - }); - - return request; - } - - /** - * Find purchase order by ID - * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * @param {String} orderId ID of pet that needs to be fetched - * @param {function} callback the callback function - * @return Order - */ - self.getOrderById = function(orderId, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'orderId' is set - if (orderId == null) { - //throw new ApiException(400, "Missing the required parameter 'orderId' when calling getOrderById"); - var errorRequiredMsg = "Missing the required parameter 'orderId' when calling getOrderById"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'orderId': orderId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new Order(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; + } + + return this.apiClient.callApi( + '/store/order/{orderId}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/store/order/{orderId}", "\\{format\\}","json") -, "\\{" + "orderId" + "\\}", encodeURIComponent(orderId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param {String} orderId ID of the order that needs to be deleted + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deleteOrder = function(orderId, callback) { + var postBody = null; - /** - * @returns Order - */ - - var myResponse = new Order(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'orderId' is set + if (orderId == null) { + throw "Missing the required parameter 'orderId' when calling deleteOrder"; } - }); - - return request; - } - - /** - * Delete purchase order by ID - * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * @param {String} orderId ID of the order that needs to be deleted - * @param {function} callback the callback function - * @return void - */ - self.deleteOrder = function(orderId, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'orderId' is set - if (orderId == null) { - //throw new ApiException(400, "Missing the required parameter 'orderId' when calling deleteOrder"); - var errorRequiredMsg = "Missing the required parameter 'orderId' when calling deleteOrder"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'orderId': orderId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/store/order/{orderId}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/store/order/{orderId}", "\\{format\\}","json") -, "\\{" + "orderId" + "\\}", encodeURIComponent(orderId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - + }; - path += createQueryString(queryParams); - - var options = {type: "DELETE", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ - - if (callback) { - callback(response, textStatus, jqXHR); - } - - }); - - return request; - } - - - - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } - - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} - -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = StoreApi; -} + return StoreApi; +})); diff --git a/samples/client/petstore/javascript/src/api/UserApi.js b/samples/client/petstore/javascript/src/api/UserApi.js index 148e6171ed40..656bf56dd861 100644 --- a/samples/client/petstore/javascript/src/api/UserApi.js +++ b/samples/client/petstore/javascript/src/api/UserApi.js @@ -1,498 +1,361 @@ -// require files in Node.js environment -var $, User; -if (typeof module === 'object' && module.exports) { - $ = require('jquery'); - User = require('../model/User.js'); -} +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/User'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'), require('../model/User.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.UserApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.User); + } +}(this, function(ApiClient, User) { + 'use strict'; -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery', 'User'], function($, User) { - return UserApi; - }); -} + var UserApi = function UserApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; -var UserApi = function UserApi() { - var self = this; - - - /** - * Create user - * This can only be done by the logged in user. - * @param {User} body Created user object - * @param {function} callback the callback function - * @return void - */ - self.createUser = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; + var self = this; - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + /** + * Create user + * This can only be done by the logged in user. + * @param {User} body Created user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUser = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Creates list of users with given input array + * + * @param {Array} body List of user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUsersWithArrayInput = function(body, callback) { + var postBody = body; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/createWithArray', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Creates list of users with given input array - * - * @param {Array} body List of user object - * @param {function} callback the callback function - * @return void - */ - self.createUsersWithArrayInput = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/createWithArray", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Creates list of users with given input array + * + * @param {Array} body List of user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUsersWithListInput = function(body, callback) { + var postBody = body; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/createWithList', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Creates list of users with given input array - * - * @param {Array} body List of user object - * @param {function} callback the callback function - * @return void - */ - self.createUsersWithListInput = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/createWithList", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Logs user into the system + * + * @param {String} username The user name for login + * @param {String} password The password for login in clear text + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: String + */ + self.loginUser = function(username, password, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + 'username': username, + 'password': password + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/login', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Logs user into the system - * - * @param {String} username The user name for login - * @param {String} password The password for login in clear text - * @param {function} callback the callback function - * @return String - */ - self.loginUser = function(username, password, callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/login", "\\{format\\}","json")); + /** + * Logs out current logged in user session + * + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.logoutUser = function(callback) { + var postBody = null; + - var queryParams = {}; - var headerParams = {}; - var formParams = {}; + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; - - queryParams.username = username; - - queryParams.password = password; - - - + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ + var handleResponse = null; if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); + handleResponse = function(error, data, response) { + callback(error, data, response); + }; } - }); - - request.done(function(response, textStatus, jqXHR){ + + return this.apiClient.callApi( + '/user/logout', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - /** - * @returns String - */ - var myResponse = response; - - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - - }); - - return request; - } - - /** - * Logs out current logged in user session - * - * @param {function} callback the callback function - * @return void - */ - self.logoutUser = function(callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/logout", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Get user by user name + * + * @param {String} username The name that needs to be fetched. Use user1 for testing. + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: User + */ + self.getUserByName = function(username, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling getUserByName"; } - }); - - return request; - } - - /** - * Get user by user name - * - * @param {String} username The name that needs to be fetched. Use user1 for testing. - * @param {function} callback the callback function - * @return User - */ - self.getUserByName = function(username, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - //throw new ApiException(400, "Missing the required parameter 'username' when calling getUserByName"); - var errorRequiredMsg = "Missing the required parameter 'username' when calling getUserByName"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new User(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; + } + + return this.apiClient.callApi( + '/user/{username}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user/{username}", "\\{format\\}","json") -, "\\{" + "username" + "\\}", encodeURIComponent(username.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Updated user + * This can only be done by the logged in user. + * @param {String} username name that need to be deleted + * @param {User} body Updated user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updateUser = function(username, body, callback) { + var postBody = body; - /** - * @returns User - */ - - var myResponse = new User(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling updateUser"; } - }); - - return request; - } - - /** - * Updated user - * This can only be done by the logged in user. - * @param {String} username name that need to be deleted - * @param {User} body Updated user object - * @param {function} callback the callback function - * @return void - */ - self.updateUser = function(username, body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - //throw new ApiException(400, "Missing the required parameter 'username' when calling updateUser"); - var errorRequiredMsg = "Missing the required parameter 'username' when calling updateUser"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/{username}', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user/{username}", "\\{format\\}","json") -, "\\{" + "username" + "\\}", encodeURIComponent(username.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "PUT", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Delete user + * This can only be done by the logged in user. + * @param {String} username The name that needs to be deleted + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deleteUser = function(username, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling deleteUser"; } - }); - - return request; - } - - /** - * Delete user - * This can only be done by the logged in user. - * @param {String} username The name that needs to be deleted - * @param {function} callback the callback function - * @return void - */ - self.deleteUser = function(username, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - //throw new ApiException(400, "Missing the required parameter 'username' when calling deleteUser"); - var errorRequiredMsg = "Missing the required parameter 'username' when calling deleteUser"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/{username}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user/{username}", "\\{format\\}","json") -, "\\{" + "username" + "\\}", encodeURIComponent(username.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - + }; - path += createQueryString(queryParams); - - var options = {type: "DELETE", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ - - if (callback) { - callback(response, textStatus, jqXHR); - } - - }); - - return request; - } - - - - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } - - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} - -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = UserApi; -} + return UserApi; +})); diff --git a/samples/client/petstore/javascript/src/index.js b/samples/client/petstore/javascript/src/index.js index b772f6024dca..725eb486075c 100644 --- a/samples/client/petstore/javascript/src/index.js +++ b/samples/client/petstore/javascript/src/index.js @@ -1,22 +1,23 @@ -if (typeof module === 'object' && module.exports) { - var SwaggerPetstore = {}; - - SwaggerPetstore.User = require('./model/User.js'); - - SwaggerPetstore.Category = require('./model/Category.js'); - - SwaggerPetstore.Pet = require('./model/Pet.js'); - - SwaggerPetstore.Tag = require('./model/Tag.js'); - - SwaggerPetstore.Order = require('./model/Order.js'); - - - SwaggerPetstore.UserApi = require('./api/UserApi.js'); - - SwaggerPetstore.StoreApi = require('./api/StoreApi.js'); - - SwaggerPetstore.PetApi = require('./api/PetApi.js'); - - module.exports = SwaggerPetstore; -} \ No newline at end of file +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['./ApiClient', './model/User', './model/Category', './model/Pet', './model/Tag', './model/Order', './api/UserApi', './api/StoreApi', './api/PetApi'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('./ApiClient.js'), require('./model/User.js'), require('./model/Category.js'), require('./model/Pet.js'), require('./model/Tag.js'), require('./model/Order.js'), require('./api/UserApi.js'), require('./api/StoreApi.js'), require('./api/PetApi.js')); + } +}(function(ApiClient, User, Category, Pet, Tag, Order, UserApi, StoreApi, PetApi) { + 'use strict'; + + return { + ApiClient: ApiClient, + User: User, + Category: Category, + Pet: Pet, + Tag: Tag, + Order: Order, + UserApi: UserApi, + StoreApi: StoreApi, + PetApi: PetApi + }; +})); diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index ff40497a61a0..6b302a32f302 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -1,81 +1,89 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { - -} - - - - -//export module -if ( typeof define === "function" && define.amd ) { - define('Category', ['jquery'], - function($) { - return Category; - }); -} - - -var Category = function Category() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: String - **/ - self.name = null; - self.constructFromObject = function(data) { - if (!data) { - return; + + + var Category = function Category() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: String + **/ + self.name = null; + + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.name = data.name; + + } + + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; - - self.name = data.name; + /** + * @return {String} + **/ + self.getName = function() { + return self.name; + } + + /** + * @param {String} name + **/ + self.setName = function (name) { + self.name = name; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Category = Category; } + return Category; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {String} - **/ - self.getName = function() { - return self.name; - } - - /** - * @param {String} name - **/ - self.setName = function (name) { - self.name = name; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Category; -} +})); diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index 3cf2335b5356..9f641242bf86 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -1,11 +1,22 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { -} - - - + //export module if ( typeof define === "function" && define.amd ) { define('StatusEnum', ['jquery'], function($) { @@ -35,162 +46,159 @@ var StatusEnum = function StatusEnum() { } -//export module -if ( typeof define === "function" && define.amd ) { - define('Order', ['jquery'], - function($) { - return Order; - }); -} + + var Order = function Order() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: Integer + **/ + self.petId = null; + + /** + * datatype: Integer + **/ + self.quantity = null; + + /** + * datatype: Date + **/ + self.shipDate = null; + + /** + * Order Status + * datatype: StatusEnum + **/ + self.status = null; + + /** + * datatype: Boolean + **/ + self.complete = null; + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.petId = data.petId; + + self.quantity = data.quantity; + + self.shipDate = data.shipDate; + + self.status = data.status; + + self.complete = data.complete; + + } -var Order = function Order() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: Integer - **/ - self.petId = null; - - /** - * datatype: Integer - **/ - self.quantity = null; - - /** - * datatype: Date - **/ - self.shipDate = null; - - /** - * Order Status - * datatype: StatusEnum - **/ - self.status = null; - - /** - * datatype: Boolean - **/ - self.complete = null; - - - self.constructFromObject = function(data) { - if (!data) { - return; + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; + /** + * @return {Integer} + **/ + self.getPetId = function() { + return self.petId; + } + + /** + * @param {Integer} petId + **/ + self.setPetId = function (petId) { + self.petId = petId; + } - self.petId = data.petId; + /** + * @return {Integer} + **/ + self.getQuantity = function() { + return self.quantity; + } + + /** + * @param {Integer} quantity + **/ + self.setQuantity = function (quantity) { + self.quantity = quantity; + } - self.quantity = data.quantity; + /** + * @return {Date} + **/ + self.getShipDate = function() { + return self.shipDate; + } + + /** + * @param {Date} shipDate + **/ + self.setShipDate = function (shipDate) { + self.shipDate = shipDate; + } - self.shipDate = data.shipDate; + /** + * get Order Status + * @return {StatusEnum} + **/ + self.getStatus = function() { + return self.status; + } + + /** + * set Order Status + * @param {StatusEnum} status + **/ + self.setStatus = function (status) { + self.status = status; + } - self.status = data.status; - - self.complete = data.complete; + /** + * @return {Boolean} + **/ + self.getComplete = function() { + return self.complete; + } + + /** + * @param {Boolean} complete + **/ + self.setComplete = function (complete) { + self.complete = complete; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Order = Order; } + return Order; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {Integer} - **/ - self.getPetId = function() { - return self.petId; - } - - /** - * @param {Integer} petId - **/ - self.setPetId = function (petId) { - self.petId = petId; - } - - /** - * @return {Integer} - **/ - self.getQuantity = function() { - return self.quantity; - } - - /** - * @param {Integer} quantity - **/ - self.setQuantity = function (quantity) { - self.quantity = quantity; - } - - /** - * @return {Date} - **/ - self.getShipDate = function() { - return self.shipDate; - } - - /** - * @param {Date} shipDate - **/ - self.setShipDate = function (shipDate) { - self.shipDate = shipDate; - } - - /** - * get Order Status - * @return {StatusEnum} - **/ - self.getStatus = function() { - return self.status; - } - - /** - * set Order Status - * @param {StatusEnum} status - **/ - self.setStatus = function (status) { - self.status = status; - } - - /** - * @return {Boolean} - **/ - self.getComplete = function() { - return self.complete; - } - - /** - * @param {Boolean} complete - **/ - self.setComplete = function (complete) { - self.complete = complete; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Order; -} +})); diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index 25ae2e951c80..21de32650765 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -1,13 +1,22 @@ -// require files in Node.js environment -var Category;var Tag; -if (typeof module === 'object' && module.exports) { +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, './Category', './Tag'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('./Category.js'), require('./Tag.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.Category, root.SwaggerPetstore.Tag); + } +}(this, function(module, Category, Tag) { + 'use strict'; + + - Category = require('./Category.js'); - Tag = require('./Tag.js'); -} - - - //export module if ( typeof define === "function" && define.amd ) { define('StatusEnum', ['jquery'], function($) { @@ -37,164 +46,161 @@ var StatusEnum = function StatusEnum() { } -//export module -if ( typeof define === "function" && define.amd ) { - define('Pet', ['jquery', 'Category', 'Array'], - function($, Category, Array) { - return Pet; - }); -} + + var Pet = function Pet(photoUrls, name) { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: Category + **/ + self.category = new Category(); + + /** + * datatype: String + * required + **/ + self.name = name; + + /** + * datatype: Array + * required + **/ + self.photoUrls = photoUrls; + + /** + * datatype: Array + **/ + self.tags = []; + + /** + * pet status in the store + * datatype: StatusEnum + **/ + self.status = null; + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.category.constructFromObject(data.category); + + self.name = data.name; + + self.photoUrls = new Array(); + + self.tags = new Array(); + + self.status = data.status; + + } -var Pet = function Pet(photoUrls, name) { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: Category - **/ - self.category = new Category(); - - /** - * datatype: String - * required - **/ - self.name = name; - - /** - * datatype: Array - * required - **/ - self.photoUrls = photoUrls; - - /** - * datatype: Array - **/ - self.tags = []; - - /** - * pet status in the store - * datatype: StatusEnum - **/ - self.status = null; - - - self.constructFromObject = function(data) { - if (!data) { - return; + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; + /** + * @return {Category} + **/ + self.getCategory = function() { + return self.category; + } + + /** + * @param {Category} category + **/ + self.setCategory = function (category) { + self.category = category; + } - self.category.constructFromObject(data.category); + /** + * @return {String} + **/ + self.getName = function() { + return self.name; + } + + /** + * @param {String} name + **/ + self.setName = function (name) { + self.name = name; + } - self.name = data.name; + /** + * @return {Array} + **/ + self.getPhotoUrls = function() { + return self.photoUrls; + } + + /** + * @param {Array} photoUrls + **/ + self.setPhotoUrls = function (photoUrls) { + self.photoUrls = photoUrls; + } - self.photoUrls = new Array(); + /** + * @return {Array} + **/ + self.getTags = function() { + return self.tags; + } + + /** + * @param {Array} tags + **/ + self.setTags = function (tags) { + self.tags = tags; + } - self.tags = new Array(); - - self.status = data.status; + /** + * get pet status in the store + * @return {StatusEnum} + **/ + self.getStatus = function() { + return self.status; + } + + /** + * set pet status in the store + * @param {StatusEnum} status + **/ + self.setStatus = function (status) { + self.status = status; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Pet = Pet; } + return Pet; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {Category} - **/ - self.getCategory = function() { - return self.category; - } - - /** - * @param {Category} category - **/ - self.setCategory = function (category) { - self.category = category; - } - - /** - * @return {String} - **/ - self.getName = function() { - return self.name; - } - - /** - * @param {String} name - **/ - self.setName = function (name) { - self.name = name; - } - - /** - * @return {Array} - **/ - self.getPhotoUrls = function() { - return self.photoUrls; - } - - /** - * @param {Array} photoUrls - **/ - self.setPhotoUrls = function (photoUrls) { - self.photoUrls = photoUrls; - } - - /** - * @return {Array} - **/ - self.getTags = function() { - return self.tags; - } - - /** - * @param {Array} tags - **/ - self.setTags = function (tags) { - self.tags = tags; - } - - /** - * get pet status in the store - * @return {StatusEnum} - **/ - self.getStatus = function() { - return self.status; - } - - /** - * set pet status in the store - * @param {StatusEnum} status - **/ - self.setStatus = function (status) { - self.status = status; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Pet; -} +})); diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index 0fa97bd8c78a..2dbf932f300a 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -1,81 +1,89 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { - -} - - - - -//export module -if ( typeof define === "function" && define.amd ) { - define('Tag', ['jquery'], - function($) { - return Tag; - }); -} - - -var Tag = function Tag() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: String - **/ - self.name = null; - self.constructFromObject = function(data) { - if (!data) { - return; + + + var Tag = function Tag() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: String + **/ + self.name = null; + + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.name = data.name; + + } + + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; - - self.name = data.name; + /** + * @return {String} + **/ + self.getName = function() { + return self.name; + } + + /** + * @param {String} name + **/ + self.setName = function (name) { + self.name = name; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Tag = Tag; } + return Tag; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {String} - **/ - self.getName = function() { - return self.name; - } - - /** - * @param {String} name - **/ - self.setName = function (name) { - self.name = name; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Tag; -} +})); diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index 632208a523c8..a76ccf19013b 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -1,210 +1,218 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { -} + + + var User = function User() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: String + **/ + self.username = null; + + /** + * datatype: String + **/ + self.firstName = null; + + /** + * datatype: String + **/ + self.lastName = null; + + /** + * datatype: String + **/ + self.email = null; + + /** + * datatype: String + **/ + self.password = null; + + /** + * datatype: String + **/ + self.phone = null; + + /** + * User Status + * datatype: Integer + **/ + self.userStatus = null; + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.username = data.username; + + self.firstName = data.firstName; + + self.lastName = data.lastName; + + self.email = data.email; + + self.password = data.password; + + self.phone = data.phone; + + self.userStatus = data.userStatus; + + } + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } -//export module -if ( typeof define === "function" && define.amd ) { - define('User', ['jquery'], - function($) { - return User; - }); -} - - -var User = function User() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: String - **/ - self.username = null; - - /** - * datatype: String - **/ - self.firstName = null; - - /** - * datatype: String - **/ - self.lastName = null; - - /** - * datatype: String - **/ - self.email = null; - - /** - * datatype: String - **/ - self.password = null; - - /** - * datatype: String - **/ - self.phone = null; - - /** - * User Status - * datatype: Integer - **/ - self.userStatus = null; - - - self.constructFromObject = function(data) { - if (!data) { - return; + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; + /** + * @return {String} + **/ + self.getUsername = function() { + return self.username; + } + + /** + * @param {String} username + **/ + self.setUsername = function (username) { + self.username = username; + } - self.username = data.username; + /** + * @return {String} + **/ + self.getFirstName = function() { + return self.firstName; + } + + /** + * @param {String} firstName + **/ + self.setFirstName = function (firstName) { + self.firstName = firstName; + } - self.firstName = data.firstName; + /** + * @return {String} + **/ + self.getLastName = function() { + return self.lastName; + } + + /** + * @param {String} lastName + **/ + self.setLastName = function (lastName) { + self.lastName = lastName; + } - self.lastName = data.lastName; + /** + * @return {String} + **/ + self.getEmail = function() { + return self.email; + } + + /** + * @param {String} email + **/ + self.setEmail = function (email) { + self.email = email; + } - self.email = data.email; + /** + * @return {String} + **/ + self.getPassword = function() { + return self.password; + } + + /** + * @param {String} password + **/ + self.setPassword = function (password) { + self.password = password; + } - self.password = data.password; + /** + * @return {String} + **/ + self.getPhone = function() { + return self.phone; + } + + /** + * @param {String} phone + **/ + self.setPhone = function (phone) { + self.phone = phone; + } - self.phone = data.phone; - - self.userStatus = data.userStatus; + /** + * get User Status + * @return {Integer} + **/ + self.getUserStatus = function() { + return self.userStatus; + } + + /** + * set User Status + * @param {Integer} userStatus + **/ + self.setUserStatus = function (userStatus) { + self.userStatus = userStatus; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.User = User; } + return User; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {String} - **/ - self.getUsername = function() { - return self.username; - } - - /** - * @param {String} username - **/ - self.setUsername = function (username) { - self.username = username; - } - - /** - * @return {String} - **/ - self.getFirstName = function() { - return self.firstName; - } - - /** - * @param {String} firstName - **/ - self.setFirstName = function (firstName) { - self.firstName = firstName; - } - - /** - * @return {String} - **/ - self.getLastName = function() { - return self.lastName; - } - - /** - * @param {String} lastName - **/ - self.setLastName = function (lastName) { - self.lastName = lastName; - } - - /** - * @return {String} - **/ - self.getEmail = function() { - return self.email; - } - - /** - * @param {String} email - **/ - self.setEmail = function (email) { - self.email = email; - } - - /** - * @return {String} - **/ - self.getPassword = function() { - return self.password; - } - - /** - * @param {String} password - **/ - self.setPassword = function (password) { - self.password = password; - } - - /** - * @return {String} - **/ - self.getPhone = function() { - return self.phone; - } - - /** - * @param {String} phone - **/ - self.setPhone = function (phone) { - self.phone = phone; - } - - /** - * get User Status - * @return {Integer} - **/ - self.getUserStatus = function() { - return self.userStatus; - } - - /** - * set User Status - * @param {Integer} userStatus - **/ - self.setUserStatus = function (userStatus) { - self.userStatus = userStatus; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = User; -} +})); diff --git a/samples/client/petstore/javascript/test/ApiClientTest.js b/samples/client/petstore/javascript/test/ApiClientTest.js new file mode 100644 index 000000000000..f577a3ec7b65 --- /dev/null +++ b/samples/client/petstore/javascript/test/ApiClientTest.js @@ -0,0 +1,69 @@ +if (typeof module === 'object' && module.exports) { + var expect = require('expect.js'); + var SwaggerPetstore = require('../src/index'); +} + +var apiClient = SwaggerPetstore.ApiClient.default; + +describe('ApiClient', function() { + describe('defaults', function() { + it('should have correct default values with the default API client', function() { + expect(apiClient).to.be.ok(); + expect(apiClient.basePath).to.be('http://petstore.swagger.io/v2'); + }); + + it('should have correct default values with new API client and can customize it', function() { + var newClient = new SwaggerPetstore.ApiClient; + expect(newClient.basePath).to.be('http://petstore.swagger.io/v2'); + expect(newClient.buildUrl('/abc', {})).to.be('http://petstore.swagger.io/v2/abc'); + + newClient.basePath = 'http://example.com'; + expect(newClient.basePath).to.be('http://example.com'); + expect(newClient.buildUrl('/abc', {})).to.be('http://example.com/abc'); + }); + }); + + describe('#paramToString', function() { + it('should return empty string for null and undefined', function() { + expect(apiClient.paramToString(null)).to.be(''); + expect(apiClient.paramToString(undefined)).to.be(''); + }); + + it('should return string', function() { + expect(apiClient.paramToString('')).to.be(''); + expect(apiClient.paramToString('abc')).to.be('abc'); + expect(apiClient.paramToString(123)).to.be('123'); + }); + }); + + describe('#buildUrl', function() { + it('should work without path parameters in the path', function() { + expect(apiClient.buildUrl('/abc', {})).to + .be('http://petstore.swagger.io/v2/abc'); + expect(apiClient.buildUrl('/abc/def?ok', {id: 123})).to + .be('http://petstore.swagger.io/v2/abc/def?ok'); + }); + + it('should work with path parameters in the path', function() { + expect(apiClient.buildUrl('/{id}', {id: 123})).to + .be('http://petstore.swagger.io/v2/123'); + expect(apiClient.buildUrl('/abc/{id}/{name}?ok', {id: 456, name: 'a b'})).to. + be('http://petstore.swagger.io/v2/abc/456/a%20b?ok'); + }); + }); + + describe('#isJsonMime', function() { + it('should return true for JSON MIME', function() { + expect(apiClient.isJsonMime('application/json')).to.be(true); + expect(apiClient.isJsonMime('application/json; charset=UTF8')).to.be(true); + expect(apiClient.isJsonMime('APPLICATION/JSON')).to.be(true); + }); + + it('should return false for non-JSON MIME', function() { + expect(apiClient.isJsonMime('')).to.be(false); + expect(apiClient.isJsonMime('text/plain')).to.be(false); + expect(apiClient.isJsonMime('application/xml')).to.be(false); + expect(apiClient.isJsonMime('application/jsonp')).to.be(false); + }); + }); +}); diff --git a/samples/client/petstore/javascript/test/api/PetApiTest.js b/samples/client/petstore/javascript/test/api/PetApiTest.js index 325cc16b616a..f2c72bb80110 100644 --- a/samples/client/petstore/javascript/test/api/PetApiTest.js +++ b/samples/client/petstore/javascript/test/api/PetApiTest.js @@ -1,25 +1,21 @@ if (typeof module === 'object' && module.exports) { var expect = require('expect.js'); - var requireApiWithMocks = require('../helper.js').requireApiWithMocks; - var PetApi = requireApiWithMocks('PetApi'); - var Pet = require('../../src/model/Pet'); - var Category = require('../../src/model/Category'); - var Tag = require('../../src/model/Tag'); + var SwaggerPetstore = require('../../src/index'); } var api; beforeEach(function() { - api = new PetApi(); + api = new SwaggerPetstore.PetApi(); }); var createRandomPet = function() { var id = new Date().getTime(); - var pet = new Pet(); + var pet = new SwaggerPetstore.Pet(); pet.setId(id); pet.setName("gorilla" + id); - var category = new Category(); + var category = new SwaggerPetstore.Category(); category.setName("really-happy"); pet.setCategory(category); @@ -31,13 +27,17 @@ var createRandomPet = function() { }; describe('PetApi', function() { - it('should create and get pet', function (done) { + it('should create and get pet', function(done) { var pet = createRandomPet(); - api.addPet(pet).then(function() { - api.getPetById(pet.id, function(fetched, textStatus, jqXHR, error) { - if (error) throw error; + api.addPet(pet, function(error) { + if (error) throw error; + + api.getPetById(pet.id, function(error, fetched, response) { + if (error) throw error; + expect(response.status).to.be(200); + expect(response.ok).to.be(true); + expect(response.get('Content-Type')).to.be('application/json'); - expect(textStatus).to.be('success'); expect(fetched).to.be.ok(); expect(fetched.id).to.be(pet.id); expect(fetched.getCategory()).to.be.ok(); @@ -46,8 +46,6 @@ describe('PetApi', function() { api.deletePet(pet.id); done(); }); - }, function(jqXHR, textStatus, errorThrown) { - throw errorThrown || textStatus; }); }); }); diff --git a/samples/client/petstore/javascript/test/helper.js b/samples/client/petstore/javascript/test/helper.js deleted file mode 100644 index 018b6428af66..000000000000 --- a/samples/client/petstore/javascript/test/helper.js +++ /dev/null @@ -1,19 +0,0 @@ -var mockrequire = require('mockrequire'); - -var jquery = require('jquery'); -var domino = require('domino'); -var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; -var window = domino.createWindow(); -var $ = jquery(window); -$.support.cors = true; -$.ajaxSettings.xhr = function() { - return new XMLHttpRequest(); -}; - -var requireApiWithMocks = function(path) { - return mockrequire('../src/api/' + path, { - 'jquery': $ - }); -}; - -exports.requireApiWithMocks = requireApiWithMocks; diff --git a/samples/client/petstore/javascript/test/run_tests.html b/samples/client/petstore/javascript/test/run_tests.html index c5655275cc52..58118d8d7d40 100644 --- a/samples/client/petstore/javascript/test/run_tests.html +++ b/samples/client/petstore/javascript/test/run_tests.html @@ -10,7 +10,6 @@ - + + + + + + + +