Added functionality to handle optional parameters for Scala (#3683)

* 1. Modified api.mushtache to handle optional paramters for scala (#3665)
2. Updated petstore sample for scala

* Generated scala-petstore.sh (#3665)

* 1. Updated api.mustache to handle optional thing with headers and file parameters
2. Generated petstore sample for the above changes
This commit is contained in:
Jyotsna Karan 2016-09-01 15:41:23 +05:30 committed by wing328
parent 8e7d3d1a72
commit 062e6fc3ac
4 changed files with 86 additions and 57 deletions

View File

@ -31,7 +31,7 @@ class {{classname}}(val defBasePath: String = "{{basePath}}",
{{#allParams}} * @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}} {{#allParams}} * @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
{{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
*/ */
def {{operationId}} ({{#allParams}}{{paramName}}: {{dataType}}{{#defaultValue}} /* = {{{defaultValue}}} */{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {{#returnType}}: Option[{{returnType}}]{{/returnType}} = { def {{operationId}}({{#allParams}}{{paramName}}: {{#required}}{{dataType}}{{#defaultValue}} /* = {{{defaultValue}}}*/{{/defaultValue}}{{/required}}{{^required}}Option[{{dataType}}]{{#defaultValue}} /* = {{{defaultValue}}}*/{{/defaultValue}}{{^defaultValue}} = None{{/defaultValue}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}){{#returnType}}: Option[{{returnType}}]{{/returnType}} = {
// create path and map variables // create path and map variables
val path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{baseName}}" + "\\}",apiInvoker.escape({{paramName}})) val path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{baseName}}" + "\\}",apiInvoker.escape({{paramName}}))
@ -53,27 +53,57 @@ class {{classname}}(val defBasePath: String = "{{basePath}}",
{{/isPrimitiveType}} {{/isPrimitiveType}}
{{/required}} {{/required}}
{{/allParams}} {{/allParams}}
{{#queryParams}}if(String.valueOf({{paramName}}) != "null") queryParams += "{{baseName}}" -> {{paramName}}.toString {{#queryParams}}
{{#required}}
if(String.valueOf({{paramName}}) != "null") queryParams += "{{baseName}}" -> {{paramName}}.toString
{{/required}}
{{^required}}
{{paramName}}.map(paramVal => queryParams += "{{baseName}}" -> paramVal.toString)
{{/required}}
{{/queryParams}} {{/queryParams}}
{{#headerParams}}headerParams += "{{baseName}}" -> {{paramName}} {{#headerParams}}
{{#required}}
headerParams += "{{baseName}}" -> {{paramName}}
{{/required}}
{{^required}}
{{paramName}}.map(paramVal => headerParams += "{{baseName}}" -> paramVal)
{{/required}}
{{/headerParams}} {{/headerParams}}
var postBody: AnyRef = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}} var postBody: AnyRef = {{#bodyParam}}{{#required}}{{paramName}}{{/required}}{{^required}}{{paramName}}.map(paramVal => paramVal){{/required}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}
if(contentType.startsWith("multipart/form-data")) { if(contentType.startsWith("multipart/form-data")) {
val mp = new FormDataMultiPart() val mp = new FormDataMultiPart()
{{#formParams}}{{#notFile}} {{#formParams}}{{#notFile}}
{{#required}}
mp.field("{{baseName}}", {{paramName}}.toString(), MediaType.MULTIPART_FORM_DATA_TYPE) mp.field("{{baseName}}", {{paramName}}.toString(), MediaType.MULTIPART_FORM_DATA_TYPE)
{{/required}}
{{^required}}
{{paramName}}.map(paramVal => mp.field("{{baseName}}", paramVal.toString, MediaType.MULTIPART_FORM_DATA_TYPE))
{{/required}}
{{/notFile}}{{#isFile}} {{/notFile}}{{#isFile}}
{{#required}}
mp.field("{{baseName}}", file.getName) mp.field("{{baseName}}", file.getName)
mp.bodyPart(new FileDataBodyPart("{{baseName}}", {{paramName}}, MediaType.MULTIPART_FORM_DATA_TYPE)) mp.bodyPart(new FileDataBodyPart("{{baseName}}", {{paramName}}, MediaType.MULTIPART_FORM_DATA_TYPE))
{{/required}}
{{^required}}
file.map(fileVal => mp.field("{{baseName}}", fileVal.getName))
{{paramName}}.map(paramVal => mp.bodyPart(new FileDataBodyPart("{{baseName}}", paramVal, MediaType.MULTIPART_FORM_DATA_TYPE)))
{{/required}}
{{/isFile}}{{/formParams}} {{/isFile}}{{/formParams}}
postBody = mp postBody = mp
} }
else { else {
{{#formParams}} {{#formParams}}
{{#notFile}}formParams += "{{baseName}}" -> {{paramName}}.toString(){{/notFile}} {{#notFile}}
{{#required}}
formParams += "{{baseName}}" -> {{paramName}}.toString()
{{/required}}
{{^required}}
{{paramName}}.map(paramVal => formParams += "{{baseName}}" -> paramVal.toString)
{{/required}}
{{/notFile}}
{{/formParams}} {{/formParams}}
} }

View File

@ -25,8 +25,8 @@
package io.swagger.client.api package io.swagger.client.api
import io.swagger.client.model.Pet import io.swagger.client.model.Pet
import io.swagger.client.model.ApiResponse
import java.io.File import java.io.File
import io.swagger.client.model.ApiResponse
import io.swagger.client.ApiInvoker import io.swagger.client.ApiInvoker
import io.swagger.client.ApiException import io.swagger.client.ApiException
@ -96,7 +96,7 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2",
* @param apiKey (optional) * @param apiKey (optional)
* @return void * @return void
*/ */
def deletePet (petId: Long, apiKey: String) = { def deletePet(petId: Long, apiKey: Option[String] = None) = {
// create path and map variables // create path and map variables
val path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId)) val path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId))
@ -110,7 +110,7 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2",
val formParams = new HashMap[String, String] val formParams = new HashMap[String, String]
headerParams += "api_key" -> apiKey apiKey.map(paramVal => headerParams += "api_key" -> paramVal)
var postBody: AnyRef = null var postBody: AnyRef = null
@ -314,7 +314,7 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2",
* @param status Updated status of the pet (optional) * @param status Updated status of the pet (optional)
* @return void * @return void
*/ */
def updatePetWithForm (petId: Long, name: String, status: String) = { def updatePetWithForm(petId: Long, name: Option[String] = None, status: Option[String] = None) = {
// create path and map variables // create path and map variables
val path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId)) val path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId))
@ -334,15 +334,15 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2",
if(contentType.startsWith("multipart/form-data")) { if(contentType.startsWith("multipart/form-data")) {
val mp = new FormDataMultiPart() val mp = new FormDataMultiPart()
mp.field("name", name.toString(), MediaType.MULTIPART_FORM_DATA_TYPE) name.map(paramVal => mp.field("name", paramVal.toString, MediaType.MULTIPART_FORM_DATA_TYPE))
mp.field("status", status.toString(), MediaType.MULTIPART_FORM_DATA_TYPE) status.map(paramVal => mp.field("status", paramVal.toString, MediaType.MULTIPART_FORM_DATA_TYPE))
postBody = mp postBody = mp
} }
else { else {
formParams += "name" -> name.toString() name.map(paramVal => formParams += "name" -> paramVal.toString)
formParams += "status" -> status.toString() status.map(paramVal => formParams += "status" -> paramVal.toString)
} }
try { try {
@ -364,7 +364,7 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2",
* @param file file to upload (optional) * @param file file to upload (optional)
* @return ApiResponse * @return ApiResponse
*/ */
def uploadFile (petId: Long, additionalMetadata: String, file: File) : Option[ApiResponse] = { def uploadFile(petId: Long, additionalMetadata: Option[String] = None, file: Option[File] = None): Option[ApiResponse] = {
// create path and map variables // create path and map variables
val path = "/pet/{petId}/uploadImage".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId)) val path = "/pet/{petId}/uploadImage".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId))
@ -384,16 +384,15 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2",
if(contentType.startsWith("multipart/form-data")) { if(contentType.startsWith("multipart/form-data")) {
val mp = new FormDataMultiPart() val mp = new FormDataMultiPart()
mp.field("additionalMetadata", additionalMetadata.toString(), MediaType.MULTIPART_FORM_DATA_TYPE) additionalMetadata.map(paramVal => mp.field("additionalMetadata", paramVal.toString, MediaType.MULTIPART_FORM_DATA_TYPE))
mp.field("file", file.getName) file.map(fileVal => mp.field("file", fileVal.getName))
mp.bodyPart(new FileDataBodyPart("file", file, MediaType.MULTIPART_FORM_DATA_TYPE)) file.map(paramVal => mp.bodyPart(new FileDataBodyPart("file", paramVal, MediaType.MULTIPART_FORM_DATA_TYPE)))
postBody = mp postBody = mp
} }
else { else {
formParams += "additionalMetadata" -> additionalMetadata.toString() additionalMetadata.map(paramVal => formParams += "additionalMetadata" -> paramVal.toString)
} }
try { try {