From e782ea2c050e4349e19245d93509ca69efc62567 Mon Sep 17 00:00:00 2001 From: James Ebentier Date: Fri, 20 Mar 2015 14:45:12 -0700 Subject: [PATCH 01/47] Default Headers: allowing the setting of defaultHeaders on ApiClient --- .../src/main/resources/php/Swagger.mustache | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/Swagger.mustache b/modules/swagger-codegen/src/main/resources/php/Swagger.mustache index a7a18866345..dfc672b37ad 100644 --- a/modules/swagger-codegen/src/main/resources/php/Swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/php/Swagger.mustache @@ -38,14 +38,24 @@ class APIClient { public static $PUT = "PUT"; public static $DELETE = "DELETE"; + /** + * @var string $host Host URL + */ + public $host; + + /** + * @var array $defaultHeaders Array of Headers you would like applied to all requests with this client + */ + public $defaultHeaders; + /** * @param string $host the address of the API server * @param string $headerName a header to pass on requests + * @param string $headerValue the value of the header to pass on requests */ function __construct($host, $headerName = null, $headerValue = null) { $this->host = $host; - $this->headerName = $headerName; - $this->headerValue = $headerValue; + $this->defaultHeaders[$headerName] = $headerValue; } /** @@ -58,6 +68,14 @@ class APIClient { $this->curl_timout = $seconds; } + /** + * @param string $headerName a header to pass on requests + * @param string $headerValue the value of the header to pass on requests + */ + public function setDefaultHeader($headerName, $headerValue) { + $this->defaultHeaders[$headerName] = $headerValue; + } + /** * @param string $resourcePath path to method endpoint @@ -72,19 +90,13 @@ class APIClient { $headers = array(); - # Allow API key from $headerParams to override default - $added_api_key = False; + # Allow headers passed in through $headerParams to take president over $this->defaultHeaders + $headerParams = array_merge($this->defaultHeaders, $headerParams); if ($headerParams != null) { foreach ($headerParams as $key => $val) { $headers[] = "$key: $val"; - if ($key == $this->headerName) { - $added_api_key = True; - } } } - if (! $added_api_key && $this->headerName != null) { - $headers[] = $this->headerName . ": " . $this->headerValue; - } if (strpos($headers['Content-Type'], "multipart/form-data") < 0 and (is_object($postData) or is_array($postData))) { $postData = json_encode($this->sanitizeForSerialization($postData)); From 0c3f06604d0c8bb2bcc31d1e5e77cee5511a37ae Mon Sep 17 00:00:00 2001 From: James Ebentier Date: Fri, 20 Mar 2015 14:54:53 -0700 Subject: [PATCH 02/47] Correcting spelling error in comment --- modules/swagger-codegen/src/main/resources/php/Swagger.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/php/Swagger.mustache b/modules/swagger-codegen/src/main/resources/php/Swagger.mustache index dfc672b37ad..8eb65da83aa 100644 --- a/modules/swagger-codegen/src/main/resources/php/Swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/php/Swagger.mustache @@ -90,7 +90,7 @@ class APIClient { $headers = array(); - # Allow headers passed in through $headerParams to take president over $this->defaultHeaders + # Allow headers passed in through $headerParams to take precedent over $this->defaultHeaders $headerParams = array_merge($this->defaultHeaders, $headerParams); if ($headerParams != null) { foreach ($headerParams as $key => $val) { From 8323fdf8e88ae977b6cd2a7b1cc4725599e912a2 Mon Sep 17 00:00:00 2001 From: James Ebentier Date: Fri, 20 Mar 2015 14:45:12 -0700 Subject: [PATCH 03/47] Fixing deserialization bug in PHP bindings --- modules/swagger-codegen/src/main/resources/php/Swagger.mustache | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/swagger-codegen/src/main/resources/php/Swagger.mustache b/modules/swagger-codegen/src/main/resources/php/Swagger.mustache index 8eb65da83aa..c4c7f12b6a5 100644 --- a/modules/swagger-codegen/src/main/resources/php/Swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/php/Swagger.mustache @@ -248,6 +248,7 @@ class APIClient { } elseif ($class == 'DateTime') { $deserialized = new \DateTime($data); } elseif (in_array($class, array('string', 'int', 'float', 'bool'))) { + $data = (is_object($data) || is_array($data)) ? json_encode($data) : $data; settype($data, $class); $deserialized = $data; } else { From 12d4e812a6cb10cd3577741708e2c47f08fa03bc Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 6 Apr 2015 08:02:02 -0600 Subject: [PATCH 04/47] removed samples --- samples/client/petstore/ruby/lib/pet_api.rb | 462 ----------------- samples/client/petstore/ruby/lib/store_api.rb | 227 -------- samples/client/petstore/ruby/lib/user_api.rb | 486 ------------------ 3 files changed, 1175 deletions(-) delete mode 100644 samples/client/petstore/ruby/lib/pet_api.rb delete mode 100644 samples/client/petstore/ruby/lib/store_api.rb delete mode 100644 samples/client/petstore/ruby/lib/user_api.rb diff --git a/samples/client/petstore/ruby/lib/pet_api.rb b/samples/client/petstore/ruby/lib/pet_api.rb deleted file mode 100644 index 8bb98d4efb1..00000000000 --- a/samples/client/petstore/ruby/lib/pet_api.rb +++ /dev/null @@ -1,462 +0,0 @@ -require "uri" - -class PetApi - basePath = "http://petstore.swagger.io/v2" - # apiInvoker = APIInvoker - - - # Update an existing pet - # - # @param body Pet object that needs to be added to the store - # @return void - def self.updatePet (body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'body' => body - - }.merge(opts) - - #resource path - path = "/pet".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = ['application/json', 'application/xml', ] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:PUT, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Add a new pet to the store - # - # @param body Pet object that needs to be added to the store - # @return void - def self.addPet (body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'body' => body - - }.merge(opts) - - #resource path - path = "/pet".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = ['application/json', 'application/xml', ] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # 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 array[Pet] - def self.findPetsByStatus (status, opts={}) - query_param_keys = [:status] - headerParams = {} - - - - # set default values and merge with input - options = { - :'status' => status - - }.merge(opts) - - #resource path - path = "/pet/findByStatus".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - - response.map {|response| Pet.new(response) } - - - - end - - # 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 array[Pet] - def self.findPetsByTags (tags, opts={}) - query_param_keys = [:tags] - headerParams = {} - - - - # set default values and merge with input - options = { - :'tags' => tags - - }.merge(opts) - - #resource path - path = "/pet/findByTags".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - - response.map {|response| Pet.new(response) } - - - - end - - # Find pet by ID - # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - # @param pet_id ID of pet that needs to be fetched - # @return Pet - def self.getPetById (pet_id, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'pet_id' => pet_id - - }.merge(opts) - - #resource path - path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - Pet.new(response) - - - - end - - # Updates a pet in the store with form data - # - # @param pet_id ID of pet that needs to be updated - # @param name Updated name of the pet - # @param status Updated status of the pet - # @return void - def self.updatePetWithForm (pet_id, name, status, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'pet_id' => pet_id, - :'name' => name, - :'status' => status - - }.merge(opts) - - #resource path - path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = ['application/x-www-form-urlencoded', ] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - form_parameter_hash["name"] = name - form_parameter_hash["status"] = status - - - Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Deletes a pet - # - # @param api_key - # @param pet_id Pet id to delete - # @return void - def self.deletePet (api_key, pet_id, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'api_key' => api_key, - :'pet_id' => pet_id - - }.merge(opts) - - #resource path - path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - headers[:'api_key'] = api_key - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:DELETE, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # uploads an image - # - # @param pet_id ID of pet to update - # @param additional_metadata Additional data to pass to server - # @param file file to upload - # @return void - def self.uploadFile (pet_id, additional_metadata, file, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'pet_id' => pet_id, - :'additional_metadata' => additional_metadata, - :'file' => file - - }.merge(opts) - - #resource path - path = "/pet/{petId}/uploadImage".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = ['multipart/form-data', ] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - form_parameter_hash["additionalMetadata"] = additional_metadata - form_parameter_hash["file"] = file - - - Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end -end diff --git a/samples/client/petstore/ruby/lib/store_api.rb b/samples/client/petstore/ruby/lib/store_api.rb deleted file mode 100644 index bb1ece99f3c..00000000000 --- a/samples/client/petstore/ruby/lib/store_api.rb +++ /dev/null @@ -1,227 +0,0 @@ -require "uri" - -class StoreApi - basePath = "http://petstore.swagger.io/v2" - # apiInvoker = APIInvoker - - - # Returns pet inventories by status - # Returns a map of status codes to quantities - # @return map[string,int] - def self.getInventory (opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - - }.merge(opts) - - #resource path - path = "/store/inventory".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - - response.map {|response| map.new(response) } - - - - end - - # Place an order for a pet - # - # @param body order placed for purchasing the pet - # @return Order - def self.placeOrder (body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'body' => body - - }.merge(opts) - - #resource path - path = "/store/order".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - Order.new(response) - - - - end - - # Find purchase order by ID - # For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - # @param order_id ID of pet that needs to be fetched - # @return Order - def self.getOrderById (order_id, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'order_id' => order_id - - }.merge(opts) - - #resource path - path = "/store/order/{orderId}".sub('{format}','json').sub('{' + 'orderId' + '}', order_id.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - Order.new(response) - - - - end - - # Delete purchase order by ID - # For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - # @param order_id ID of the order that needs to be deleted - # @return void - def self.deleteOrder (order_id, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'order_id' => order_id - - }.merge(opts) - - #resource path - path = "/store/order/{orderId}".sub('{format}','json').sub('{' + 'orderId' + '}', order_id.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:DELETE, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end -end diff --git a/samples/client/petstore/ruby/lib/user_api.rb b/samples/client/petstore/ruby/lib/user_api.rb deleted file mode 100644 index 90b12ef1308..00000000000 --- a/samples/client/petstore/ruby/lib/user_api.rb +++ /dev/null @@ -1,486 +0,0 @@ -require "uri" - -class UserApi - basePath = "http://petstore.swagger.io/v2" - # apiInvoker = APIInvoker - - - # Create user - # This can only be done by the logged in user. - # @param body Created user object - # @return void - def self.createUser (body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'body' => body - - }.merge(opts) - - #resource path - path = "/user".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Creates list of users with given input array - # - # @param body List of user object - # @return void - def self.createUsersWithArrayInput (body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'body' => body - - }.merge(opts) - - #resource path - path = "/user/createWithArray".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Creates list of users with given input array - # - # @param body List of user object - # @return void - def self.createUsersWithListInput (body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'body' => body - - }.merge(opts) - - #resource path - path = "/user/createWithList".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Logs user into the system - # - # @param username The user name for login - # @param password The password for login in clear text - # @return string - def self.loginUser (username, password, opts={}) - query_param_keys = [:username,:password] - headerParams = {} - - - - # set default values and merge with input - options = { - :'username' => username, - :'password' => password - - }.merge(opts) - - #resource path - path = "/user/login".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - string.new(response) - - - - end - - # Logs out current logged in user session - # - # @return void - def self.logoutUser (opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - - }.merge(opts) - - #resource path - path = "/user/logout".sub('{format}','json') - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Get user by user name - # - # @param username The name that needs to be fetched. Use user1 for testing. - # @return User - def self.getUserByName (username, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'username' => username - - }.merge(opts) - - #resource path - path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body - User.new(response) - - - - end - - # 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 - def self.updateUser (username, body, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'username' => username, - :'body' => body - - }.merge(opts) - - #resource path - path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - if body != nil - if body.is_a?(Array) - array = Array.new - body.each do |item| - if item.respond_to?("to_body".to_sym) - array.push item.to_body - else - array.push item - end - end - post_body = array - else - if body.respond_to?("to_body".to_sym) - post_body = body.to_body - else - post_body = body - end - end - end - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:PUT, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end - - # Delete user - # This can only be done by the logged in user. - # @param username The name that needs to be deleted - # @return void - def self.deleteUser (username, opts={}) - query_param_keys = [] - headerParams = {} - - - - # set default values and merge with input - options = { - :'username' => username - - }.merge(opts) - - #resource path - path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) - - - # pull querystring keys from options - queryopts = options.select do |key,value| - query_param_keys.include? key - end - - # header parameters - headers = {} - - _header_accept = 'application/json, application/xml' - if _header_accept != '' - headerParams['Accept'] = _header_accept - end - _header_content_type = [] - headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' - - - - # http body (model) - post_body = nil - - # form parameters - form_parameter_hash = {} - - - - Swagger::Request.new(:DELETE, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make - - - end -end From b85c8bbe7f7b502cf91411dca6f5c79b11fc5ba6 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 6 Apr 2015 08:08:36 -0600 Subject: [PATCH 05/47] rebuilt client --- .../java/io/swagger/client/ApiInvoker.java | 3 +- .../lib/models/Category.php | 2 +- samples/client/petstore/ruby/lib/pet_api.rb | 462 +++++++++++++++++ samples/client/petstore/ruby/lib/store_api.rb | 227 ++++++++ samples/client/petstore/ruby/lib/user_api.rb | 486 ++++++++++++++++++ samples/html/index.html | 10 +- 6 files changed, 1183 insertions(+), 7 deletions(-) create mode 100644 samples/client/petstore/ruby/lib/pet_api.rb create mode 100644 samples/client/petstore/ruby/lib/store_api.rb create mode 100644 samples/client/petstore/ruby/lib/user_api.rb diff --git a/samples/client/petstore/android-java/src/main/java/io/swagger/client/ApiInvoker.java b/samples/client/petstore/android-java/src/main/java/io/swagger/client/ApiInvoker.java index 8c3f271a13e..dec0db43f66 100644 --- a/samples/client/petstore/android-java/src/main/java/io/swagger/client/ApiInvoker.java +++ b/samples/client/petstore/android-java/src/main/java/io/swagger/client/ApiInvoker.java @@ -16,6 +16,7 @@ import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.*; import org.apache.http.impl.conn.*; +import org.apache.http.impl.conn.tsccm.*; import org.apache.http.params.*; import org.apache.http.util.EntityUtils; @@ -381,7 +382,7 @@ public class ApiInvoker { schemeRegistry.register(httpsScheme); schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); - ignoreSSLConnectionManager = new SingleClientConnManager(new BasicHttpParams(), schemeRegistry); + ignoreSSLConnectionManager = new ThreadSafeClientConnManager(new BasicHttpParams(), schemeRegistry); } catch (NoSuchAlgorithmException e) { // This will only be thrown if SSL isn't available for some reason. } catch (KeyManagementException e) { diff --git a/samples/client/petstore/php/SwaggerPetstore-php/lib/models/Category.php b/samples/client/petstore/php/SwaggerPetstore-php/lib/models/Category.php index 2bd2410268c..101222b4503 100644 --- a/samples/client/petstore/php/SwaggerPetstore-php/lib/models/Category.php +++ b/samples/client/petstore/php/SwaggerPetstore-php/lib/models/Category.php @@ -16,7 +16,7 @@ */ /** - * testing category description + * * * NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. * diff --git a/samples/client/petstore/ruby/lib/pet_api.rb b/samples/client/petstore/ruby/lib/pet_api.rb new file mode 100644 index 00000000000..8bb98d4efb1 --- /dev/null +++ b/samples/client/petstore/ruby/lib/pet_api.rb @@ -0,0 +1,462 @@ +require "uri" + +class PetApi + basePath = "http://petstore.swagger.io/v2" + # apiInvoker = APIInvoker + + + # Update an existing pet + # + # @param body Pet object that needs to be added to the store + # @return void + def self.updatePet (body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'body' => body + + }.merge(opts) + + #resource path + path = "/pet".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = ['application/json', 'application/xml', ] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:PUT, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Add a new pet to the store + # + # @param body Pet object that needs to be added to the store + # @return void + def self.addPet (body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'body' => body + + }.merge(opts) + + #resource path + path = "/pet".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = ['application/json', 'application/xml', ] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # 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 array[Pet] + def self.findPetsByStatus (status, opts={}) + query_param_keys = [:status] + headerParams = {} + + + + # set default values and merge with input + options = { + :'status' => status + + }.merge(opts) + + #resource path + path = "/pet/findByStatus".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + + response.map {|response| Pet.new(response) } + + + + end + + # 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 array[Pet] + def self.findPetsByTags (tags, opts={}) + query_param_keys = [:tags] + headerParams = {} + + + + # set default values and merge with input + options = { + :'tags' => tags + + }.merge(opts) + + #resource path + path = "/pet/findByTags".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + + response.map {|response| Pet.new(response) } + + + + end + + # Find pet by ID + # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + # @param pet_id ID of pet that needs to be fetched + # @return Pet + def self.getPetById (pet_id, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'pet_id' => pet_id + + }.merge(opts) + + #resource path + path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + Pet.new(response) + + + + end + + # Updates a pet in the store with form data + # + # @param pet_id ID of pet that needs to be updated + # @param name Updated name of the pet + # @param status Updated status of the pet + # @return void + def self.updatePetWithForm (pet_id, name, status, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'pet_id' => pet_id, + :'name' => name, + :'status' => status + + }.merge(opts) + + #resource path + path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = ['application/x-www-form-urlencoded', ] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + form_parameter_hash["name"] = name + form_parameter_hash["status"] = status + + + Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Deletes a pet + # + # @param api_key + # @param pet_id Pet id to delete + # @return void + def self.deletePet (api_key, pet_id, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'api_key' => api_key, + :'pet_id' => pet_id + + }.merge(opts) + + #resource path + path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + headers[:'api_key'] = api_key + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:DELETE, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # uploads an image + # + # @param pet_id ID of pet to update + # @param additional_metadata Additional data to pass to server + # @param file file to upload + # @return void + def self.uploadFile (pet_id, additional_metadata, file, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'pet_id' => pet_id, + :'additional_metadata' => additional_metadata, + :'file' => file + + }.merge(opts) + + #resource path + path = "/pet/{petId}/uploadImage".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = ['multipart/form-data', ] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + form_parameter_hash["additionalMetadata"] = additional_metadata + form_parameter_hash["file"] = file + + + Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end +end diff --git a/samples/client/petstore/ruby/lib/store_api.rb b/samples/client/petstore/ruby/lib/store_api.rb new file mode 100644 index 00000000000..bb1ece99f3c --- /dev/null +++ b/samples/client/petstore/ruby/lib/store_api.rb @@ -0,0 +1,227 @@ +require "uri" + +class StoreApi + basePath = "http://petstore.swagger.io/v2" + # apiInvoker = APIInvoker + + + # Returns pet inventories by status + # Returns a map of status codes to quantities + # @return map[string,int] + def self.getInventory (opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + + }.merge(opts) + + #resource path + path = "/store/inventory".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + + response.map {|response| map.new(response) } + + + + end + + # Place an order for a pet + # + # @param body order placed for purchasing the pet + # @return Order + def self.placeOrder (body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'body' => body + + }.merge(opts) + + #resource path + path = "/store/order".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + Order.new(response) + + + + end + + # Find purchase order by ID + # For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + # @param order_id ID of pet that needs to be fetched + # @return Order + def self.getOrderById (order_id, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'order_id' => order_id + + }.merge(opts) + + #resource path + path = "/store/order/{orderId}".sub('{format}','json').sub('{' + 'orderId' + '}', order_id.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + Order.new(response) + + + + end + + # Delete purchase order by ID + # For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + # @param order_id ID of the order that needs to be deleted + # @return void + def self.deleteOrder (order_id, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'order_id' => order_id + + }.merge(opts) + + #resource path + path = "/store/order/{orderId}".sub('{format}','json').sub('{' + 'orderId' + '}', order_id.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:DELETE, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end +end diff --git a/samples/client/petstore/ruby/lib/user_api.rb b/samples/client/petstore/ruby/lib/user_api.rb new file mode 100644 index 00000000000..90b12ef1308 --- /dev/null +++ b/samples/client/petstore/ruby/lib/user_api.rb @@ -0,0 +1,486 @@ +require "uri" + +class UserApi + basePath = "http://petstore.swagger.io/v2" + # apiInvoker = APIInvoker + + + # Create user + # This can only be done by the logged in user. + # @param body Created user object + # @return void + def self.createUser (body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'body' => body + + }.merge(opts) + + #resource path + path = "/user".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Creates list of users with given input array + # + # @param body List of user object + # @return void + def self.createUsersWithArrayInput (body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'body' => body + + }.merge(opts) + + #resource path + path = "/user/createWithArray".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Creates list of users with given input array + # + # @param body List of user object + # @return void + def self.createUsersWithListInput (body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'body' => body + + }.merge(opts) + + #resource path + path = "/user/createWithList".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Logs user into the system + # + # @param username The user name for login + # @param password The password for login in clear text + # @return string + def self.loginUser (username, password, opts={}) + query_param_keys = [:username,:password] + headerParams = {} + + + + # set default values and merge with input + options = { + :'username' => username, + :'password' => password + + }.merge(opts) + + #resource path + path = "/user/login".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + string.new(response) + + + + end + + # Logs out current logged in user session + # + # @return void + def self.logoutUser (opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + + }.merge(opts) + + #resource path + path = "/user/logout".sub('{format}','json') + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Get user by user name + # + # @param username The name that needs to be fetched. Use user1 for testing. + # @return User + def self.getUserByName (username, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'username' => username + + }.merge(opts) + + #resource path + path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + response = Swagger::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make.body + User.new(response) + + + + end + + # 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 + def self.updateUser (username, body, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'username' => username, + :'body' => body + + }.merge(opts) + + #resource path + path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + if body != nil + if body.is_a?(Array) + array = Array.new + body.each do |item| + if item.respond_to?("to_body".to_sym) + array.push item.to_body + else + array.push item + end + end + post_body = array + else + if body.respond_to?("to_body".to_sym) + post_body = body.to_body + else + post_body = body + end + end + end + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:PUT, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end + + # Delete user + # This can only be done by the logged in user. + # @param username The name that needs to be deleted + # @return void + def self.deleteUser (username, opts={}) + query_param_keys = [] + headerParams = {} + + + + # set default values and merge with input + options = { + :'username' => username + + }.merge(opts) + + #resource path + path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) + + + # pull querystring keys from options + queryopts = options.select do |key,value| + query_param_keys.include? key + end + + # header parameters + headers = {} + + _header_accept = 'application/json, application/xml' + if _header_accept != '' + headerParams['Accept'] = _header_accept + end + _header_content_type = [] + headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json' + + + + # http body (model) + post_body = nil + + # form parameters + form_parameter_hash = {} + + + + Swagger::Request.new(:DELETE, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make + + + end +end diff --git a/samples/html/index.html b/samples/html/index.html index 1055c9962ad..1ac869c1cee 100644 --- a/samples/html/index.html +++ b/samples/html/index.html @@ -420,7 +420,7 @@

Example data

Content-Type: application/xml
-
not implemented com.wordnik.swagger.models.properties.MapProperty@2acca551
+
not implemented com.wordnik.swagger.models.properties.MapProperty@787b217

@@ -444,11 +444,11 @@

Example data

Content-Type: application/json
-
{\n  "id" : 123456789,\n  "petId" : 123456789,\n  "complete" : true,\n  "status" : "aeiou",\n  "quantity" : 123,\n  "shipDate" : "2015-04-05T03:02:18.855+0000"\n}
+
{\n  "id" : 123456789,\n  "petId" : 123456789,\n  "complete" : true,\n  "status" : "aeiou",\n  "quantity" : 123,\n  "shipDate" : "2015-04-06T14:06:47.931+0000"\n}

Example data

Content-Type: application/xml
-
\n  123456\n  123456\n  0\n  2015-04-04T20:02:18.857Z\n  string\n  true\n
+
\n  123456\n  123456\n  0\n  2015-04-06T08:06:47.934Z\n  string\n  true\n

@@ -472,11 +472,11 @@

Example data

Content-Type: application/json
-
{\n  "id" : 123456789,\n  "petId" : 123456789,\n  "complete" : true,\n  "status" : "aeiou",\n  "quantity" : 123,\n  "shipDate" : "2015-04-05T03:02:18.859+0000"\n}
+
{\n  "id" : 123456789,\n  "petId" : 123456789,\n  "complete" : true,\n  "status" : "aeiou",\n  "quantity" : 123,\n  "shipDate" : "2015-04-06T14:06:47.935+0000"\n}

Example data

Content-Type: application/xml
-
\n  123456\n  123456\n  0\n  2015-04-04T20:02:18.859Z\n  string\n  true\n
+
\n  123456\n  123456\n  0\n  2015-04-06T08:06:47.935Z\n  string\n  true\n

From c1d51266b3e10d6cf5b0136db913d615f7033f8d Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 8 Apr 2015 04:51:54 -0600 Subject: [PATCH 06/47] fixed version --- README.md | 2 +- modules/swagger-codegen-cli/pom.xml | 2 +- modules/swagger-codegen/pom.xml | 4 ++-- .../swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache | 2 +- modules/swagger-generator/pom.xml | 4 ++-- pom.xml | 2 +- samples/server/petstore/jaxrs/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6fe067b7342..c951c4b9620 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The Swagger Specification has undergone 3 revisions since initial creation in 20 Swagger Codegen Version | Release Date | Swagger Spec compatibility | Notes ----------------------- | ------------ | -------------------------- | ----- -1.5.0-M2 | 2015-04-06 | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) +2.1.0-M2 | 2015-04-06 | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) 1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) diff --git a/modules/swagger-codegen-cli/pom.xml b/modules/swagger-codegen-cli/pom.xml index caf6d3d54a3..d5c54882f5d 100644 --- a/modules/swagger-codegen-cli/pom.xml +++ b/modules/swagger-codegen-cli/pom.xml @@ -3,7 +3,7 @@ com.wordnik swagger-codegen-project - 1.5.0-M2 + 2.1.0-M2 ../.. 4.0.0 diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index 54c8cf9f6cb..e4b70a492b8 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -2,7 +2,7 @@ com.wordnik swagger-codegen-project - 1.5.0-M2 + 2.1.0-M2 ../.. 4.0.0 @@ -10,7 +10,7 @@ swagger-codegen jar swagger-codegen (core library) - 1.5.0-M2 + 2.1.0-M2 src/main/java install diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache index aa7ecf5ab48..607f2116f54 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache @@ -129,7 +129,7 @@ - 1.5.0-M2 + 2.1.0-M2 9.2.9.v20150224 1.13 1.6.3 diff --git a/modules/swagger-generator/pom.xml b/modules/swagger-generator/pom.xml index bf49f2b976f..582e40f59da 100644 --- a/modules/swagger-generator/pom.xml +++ b/modules/swagger-generator/pom.xml @@ -3,14 +3,14 @@ com.wordnik swagger-codegen-project - 1.5.0-M2 + 2.1.0-M2 ../.. com.wordnik swagger-generator war swagger-generator - 1.5.0-M2 + 2.1.0-M2 src/main/java diff --git a/pom.xml b/pom.xml index 59bf41ff0d7..1f386e48b76 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ swagger-codegen-project pom swagger-codegen-project - 1.5.0-M2 + 2.1.0-M2 https://github.com/swagger-api/swagger-codegen scm:git:git@github.com:swagger-api/swagger-codegen.git diff --git a/samples/server/petstore/jaxrs/pom.xml b/samples/server/petstore/jaxrs/pom.xml index 05764d01c0d..d75c6bbfda8 100644 --- a/samples/server/petstore/jaxrs/pom.xml +++ b/samples/server/petstore/jaxrs/pom.xml @@ -129,7 +129,7 @@ - 1.5.0-M2 + 2.1.0-M2 9.2.9.v20150224 1.13 1.6.3 From f7d30c847fdf0881891f4252de7799706c789e2f Mon Sep 17 00:00:00 2001 From: Anthony Sosso Date: Fri, 1 May 2015 15:25:54 -0700 Subject: [PATCH 07/47] Java: support x-www-form-urlencoded for PUT, POST, DELETE --- .../main/resources/Java/apiInvoker.mustache | 77 ++++++++++++------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache index ac689046047..c30ba4cdd12 100644 --- a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache @@ -18,6 +18,7 @@ import javax.ws.rs.core.MediaType; import java.util.Collection; import java.util.Map; +import java.util.Map.Entry; import java.util.HashMap; import java.util.List; import java.util.Date; @@ -195,47 +196,42 @@ public class ApiInvoker { response = (ClientResponse) builder.get(ClientResponse.class); } else if ("POST".equals(method)) { - if(body == null) + if (contentType.startsWith("application/x-www-form-urlencoded")) { + String encodedFormParams = this + .getXWWWFormUrlencodedParams(formParams); + response = builder.type(contentType).post(ClientResponse.class, + encodedFormParams); + } else if (body == null) { response = builder.post(ClientResponse.class, null); - else if(body instanceof FormDataMultiPart) { + } else if(body instanceof FormDataMultiPart) { response = builder.type(contentType).post(ClientResponse.class, body); } else response = builder.type(contentType).post(ClientResponse.class, serialize(body)); } else if ("PUT".equals(method)) { - if(body == null) + if ("application/x-www-form-urlencoded".equals(contentType)) { + String encodedFormParams = this + .getXWWWFormUrlencodedParams(formParams); + response = builder.type(contentType).put(ClientResponse.class, + encodedFormParams); + } else if(body == null) { response = builder.put(ClientResponse.class, serialize(body)); - else { - if("application/x-www-form-urlencoded".equals(contentType)) { - StringBuilder formParamBuilder = new StringBuilder(); - - // encode the form params - for(String key : formParams.keySet()) { - String value = formParams.get(key); - if(value != null && !"".equals(value.trim())) { - if(formParamBuilder.length() > 0) { - formParamBuilder.append("&"); - } - try { - formParamBuilder.append(URLEncoder.encode(key, "utf8")).append("=").append(URLEncoder.encode(value, "utf8")); - } - catch (Exception e) { - // move on to next - } - } - } - response = builder.type(contentType).put(ClientResponse.class, formParamBuilder.toString()); - } - else + } else { response = builder.type(contentType).put(ClientResponse.class, serialize(body)); } } else if ("DELETE".equals(method)) { - if(body == null) + if ("application/x-www-form-urlencoded".equals(contentType)) { + String encodedFormParams = this + .getXWWWFormUrlencodedParams(formParams); + response = builder.type(contentType).delete(ClientResponse.class, + encodedFormParams); + } else if(body == null) { response = builder.delete(ClientResponse.class); - else + } else { response = builder.type(contentType).delete(ClientResponse.class, serialize(body)); + } } else { throw new ApiException(500, "unknown method type " + method); @@ -267,6 +263,31 @@ public class ApiInvoker { } } + private String getXWWWFormUrlencodedParams(Map formParams) { + StringBuilder formParamBuilder = new StringBuilder(); + + for (Entry param : formParams.entrySet()) { + String keyStr = ApiInvoker.parameterToString(param.getKey()); + String valueStr = ApiInvoker.parameterToString(param.getValue()); + + try { + formParamBuilder.append(URLEncoder.encode(keyStr, "utf8")) + .append("=") + .append(URLEncoder.encode(valueStr, "utf8")); + formParamBuilder.append("&"); + } catch (UnsupportedEncodingException e) { + // move on to next + } + } + String encodedFormParams = formParamBuilder.toString(); + if (encodedFormParams.endsWith("&")) { + encodedFormParams = encodedFormParams.substring(0, + encodedFormParams.length() - 1); + } + return encodedFormParams; + } + + private Client getClient(String host) { if(!hostMap.containsKey(host)) { Client client = Client.create(); @@ -276,4 +297,4 @@ public class ApiInvoker { } return hostMap.get(host); } -} +} \ No newline at end of file From f627c813995a607e87b0e87d6619bf2df8323aaf Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Wed, 13 May 2015 22:47:46 +0900 Subject: [PATCH 08/47] Remove some characters from param name and operation id (since swagger-doc emits improper characters) --- .../swagger/codegen/DefaultCodegen.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index 6f51374c536..168b6a37717 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -1,5 +1,7 @@ package com.wordnik.swagger.codegen; +import com.google.common.base.Function; +import com.google.common.collect.Lists; import com.wordnik.swagger.codegen.examples.ExampleGenerator; import com.wordnik.swagger.models.*; import com.wordnik.swagger.models.auth.ApiKeyAuthDefinition; @@ -15,6 +17,7 @@ import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.File; import java.util.*; @@ -160,6 +163,7 @@ public class DefaultCodegen { } public String toParamName(String name) { + name = removeNonNameElementToCamelCase(name); if(reservedWords.contains(name)) { return escapeReservedWord(name); } @@ -680,6 +684,7 @@ public class DefaultCodegen { operationId = builder.toString(); LOGGER.warn("generated operationId " + operationId); } + operationId = removeNonNameElementToCamelCase(operationId); op.path = path; op.operationId = toOperationId(operationId); op.summary = escapeText(operation.getSummary()); @@ -1108,6 +1113,26 @@ public class DefaultCodegen { return word; } + /** + * Remove characters not suitable for variable or method name from the input and camelize it + * @param name + * @return + */ + public String removeNonNameElementToCamelCase(String name) { + String nonNameElementPattern = "[-_:;#]"; + name = StringUtils.join(Lists.transform(Lists.newArrayList(name.split(nonNameElementPattern)), new Function() { + @Nullable + @Override + public String apply(String input) { + return StringUtils.capitalize(input); + } + }), ""); + if (name.length() > 0) { + name = name.substring(0, 1).toLowerCase() + name.substring(1); + } + return name; + } + public static String camelize(String word) { return camelize(word, false); } From 23d714f2f1374629bad91f929348b3da030d3911 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Wed, 13 May 2015 22:51:14 +0900 Subject: [PATCH 09/47] Add swift code generator --- bin/swift-petstore.sh | 31 +++ .../codegen/languages/SwiftGenerator.java | 249 ++++++++++++++++++ .../com.wordnik.swagger.codegen.CodegenConfig | 1 + .../main/resources/swift/APIHelper.mustache | 21 ++ .../src/main/resources/swift/APIs.mustache | 51 ++++ .../swift/AlamofireImplementations.mustache | 73 +++++ .../main/resources/swift/Cartfile.mustache | 2 + .../main/resources/swift/Extensions.mustache | 111 ++++++++ .../src/main/resources/swift/Models.mustache | 47 ++++ .../src/main/resources/swift/api.mustache | 50 ++++ .../src/main/resources/swift/model.mustache | 46 ++++ .../petstore/swift/PetstoreClient/Cartfile | 2 + 12 files changed, 684 insertions(+) create mode 100755 bin/swift-petstore.sh create mode 100644 modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java create mode 100644 modules/swagger-codegen/src/main/resources/swift/APIHelper.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/APIs.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/Extensions.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/Models.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/model.mustache create mode 100644 samples/client/petstore/swift/PetstoreClient/Cartfile diff --git a/bin/swift-petstore.sh b/bin/swift-petstore.sh new file mode 100755 index 00000000000..ce6a7e702f0 --- /dev/null +++ b/bin/swift-petstore.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/swift -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l swift -o samples/client/petstore/swift" + +java -DappName=PetstoreClient $JAVA_OPTS -jar $executable $ags diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java new file mode 100644 index 00000000000..39a71449d5e --- /dev/null +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java @@ -0,0 +1,249 @@ +package com.wordnik.swagger.codegen.languages; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.wordnik.swagger.codegen.*; +import com.wordnik.swagger.models.Model; +import com.wordnik.swagger.models.Operation; +import com.wordnik.swagger.models.parameters.HeaderParameter; +import com.wordnik.swagger.models.parameters.Parameter; +import com.wordnik.swagger.models.properties.*; +import org.apache.commons.lang.StringUtils; + +import javax.annotation.Nullable; +import java.util.*; +import java.io.File; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { + private static final Pattern PATH_PARAM_PATTERN = Pattern.compile("\\{[a-zA-Z_]+\\}"); + protected String sourceFolder = "Classes/Swaggers"; + + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + public String getName() { + return "swift"; + } + + public String getHelp() { + return "Generates a swift client library."; + } + + public SwiftGenerator() { + super(); + outputFolder = "generated-code/swift"; + modelTemplateFiles.put("model.mustache", ".swift"); + apiTemplateFiles.put("api.mustache", ".swift"); + templateDir = "swift"; + apiPackage = "/APIs"; + modelPackage = "/Models"; + + // Inject application name + String appName = System.getProperty("appName"); + if (appName == null) { + appName = "SwaggerClient"; + } + additionalProperties.put("projectName", appName); + + // Inject base url override + String basePathOverride = System.getProperty("basePathOverride"); + if (basePathOverride != null) { + additionalProperties.put("basePathOverride", basePathOverride); + } + + sourceFolder = appName + "/" + sourceFolder; + + supportingFiles.add(new SupportingFile("Cartfile.mustache", appName, "Cartfile")); + supportingFiles.add(new SupportingFile("APIHelper.mustache", sourceFolder, "APIHelper.swift")); + supportingFiles.add(new SupportingFile("AlamofireImplementations.mustache", sourceFolder, "AlamofireImplementations.swift")); + supportingFiles.add(new SupportingFile("Extensions.mustache", sourceFolder, "Extensions.swift")); + supportingFiles.add(new SupportingFile("Models.mustache", sourceFolder, "Models.swift")); + supportingFiles.add(new SupportingFile("APIs.mustache", sourceFolder, "APIs.swift")); + + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "Int", + "Float", + "Double", + "Bool", + "Void", + "String", + "Character") + ); + defaultIncludes = new HashSet( + Arrays.asList( + "NSDate", + "Array", + "Dictionary", + "Set", + "Any", + "Empty", + "AnyObject") + ); + reservedWords = new HashSet( + Arrays.asList( + "class", "break", "as", "associativity", "deinit", "case", "dynamicType", "convenience", "enum", "continue", + "false", "dynamic", "extension", "default", "is", "didSet", "func", "do", "nil", "final", "import", "else", + "self", "get", "init", "fallthrough", "Self", "infix", "internal", "for", "super", "inout", "let", "if", + "true", "lazy", "operator", "in", "COLUMN", "left", "private", "return", "FILE", "mutating", "protocol", + "switch", "FUNCTION", "none", "public", "where", "LINE", "nonmutating", "static", "while", "optional", + "struct", "override", "subscript", "postfix", "typealias", "precedence", "var", "prefix", "Protocol", + "required", "right", "set", "Type", "unowned", "weak") + ); + + typeMapping = new HashMap(); + typeMapping.put("array", "Array"); + typeMapping.put("List", "Array"); + typeMapping.put("map", "Dictionary"); + typeMapping.put("Date", "NSDate"); + typeMapping.put("DateTime", "NSDate"); + typeMapping.put("boolean", "Bool"); + typeMapping.put("string", "String"); + typeMapping.put("char", "Character"); + typeMapping.put("short", "Int"); + typeMapping.put("int", "Int"); + typeMapping.put("long", "Int"); + typeMapping.put("integer", "Int"); + typeMapping.put("Integer", "Int"); + typeMapping.put("float", "Float"); + typeMapping.put("number", "Double"); + typeMapping.put("double", "Double"); + typeMapping.put("object", "AnyObject"); + typeMapping.put("file", "NSData"); + + importMapping = new HashMap(); + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; // add an underscore to the name + } + + @Override + public String modelFileFolder() { + return outputFolder + "/" + sourceFolder + modelPackage().replace('.', File.separatorChar); + } + + @Override + public String apiFileFolder() { + return outputFolder + "/" + sourceFolder + apiPackage().replace('.', File.separatorChar); + } + + @Override + public String getTypeDeclaration(Property p) { + 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 "[String:" + getTypeDeclaration(inner) + "]"; + } + return super.getTypeDeclaration(p); + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type = null; + if (typeMapping.containsKey(swaggerType)) { + type = typeMapping.get(swaggerType); + if (languageSpecificPrimitives.contains(type)) + return toModelName(type); + } else + type = swaggerType; + return toModelName(type); + } + + @Override + public String toDefaultValue(Property p) { + // nil + return null; + } + + @Override + public String toInstantiationType(Property p) { + if (p instanceof MapProperty) { + MapProperty ap = (MapProperty) p; + String inner = getSwaggerType(ap.getAdditionalProperties()); + return "[String:" + inner + "]"; + } else if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + String inner = getSwaggerType(ap.getItems()); + return "[" + inner + "]"; + } + return null; + } + + @Override + public CodegenProperty fromProperty(String name, Property p) { + CodegenProperty codegenProperty = super.fromProperty(name, p); + if (codegenProperty.isEnum) { + List> swiftEnums = new ArrayList>(); + List values = (List) codegenProperty.allowableValues.get("values"); + for (String value : values) { + Map map = new HashMap(); + map.put("enum", StringUtils.capitalize(value)); + map.put("raw", value); + swiftEnums.add(map); + } + codegenProperty.allowableValues.put("values", swiftEnums); + codegenProperty.datatypeWithEnum = + StringUtils.left(codegenProperty.datatypeWithEnum, codegenProperty.datatypeWithEnum.length() - "Enum".length()); + } + return codegenProperty; + } + + @Override + public String toApiName(String name) { + if(name.length() == 0) + return "DefaultAPI"; + return initialCaps(name) + "API"; + } + + @Override + public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions) { + path = normalizePath(path); + List parameters = operation.getParameters(); + parameters = Lists.newArrayList(Iterators.filter(parameters.iterator(), new Predicate() { + @Override + public boolean apply(@Nullable Parameter parameter) { + return !(parameter instanceof HeaderParameter); + } + })); + operation.setParameters(parameters); + return super.fromOperation(path, httpMethod, operation, definitions); + } + + private static String normalizePath(String path) { + StringBuilder builder = new StringBuilder(); + + int cursor = 0; + Matcher matcher = PATH_PARAM_PATTERN.matcher(path); + boolean found = matcher.find(); + while (found) { + String stringBeforeMatch = path.substring(cursor, matcher.start()); + builder.append(stringBeforeMatch); + + String group = matcher.group().substring(1, matcher.group().length() - 1); + group = camelize(group, true); + builder + .append("{") + .append(group) + .append("}"); + + cursor = matcher.end(); + found = matcher.find(); + } + + String stringAfterMatch = path.substring(cursor); + builder.append(stringAfterMatch); + + return builder.toString(); + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig index 293079fbc97..facb299b5d1 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/com.wordnik.swagger.codegen.CodegenConfig @@ -18,4 +18,5 @@ com.wordnik.swagger.codegen.languages.StaticDocCodegen com.wordnik.swagger.codegen.languages.StaticHtmlGenerator com.wordnik.swagger.codegen.languages.SwaggerGenerator com.wordnik.swagger.codegen.languages.SwaggerYamlGenerator +com.wordnik.swagger.codegen.languages.SwiftGenerator com.wordnik.swagger.codegen.languages.TizenClientCodegen diff --git a/modules/swagger-codegen/src/main/resources/swift/APIHelper.mustache b/modules/swagger-codegen/src/main/resources/swift/APIHelper.mustache new file mode 100644 index 00000000000..418f1c8512b --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/APIHelper.mustache @@ -0,0 +1,21 @@ +// APIHelper.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +class APIHelper { + static func rejectNil(source: [String:AnyObject?]) -> [String:AnyObject]? { + var destination = [String:AnyObject]() + for (key, nillableValue) in source { + if let value: AnyObject = nillableValue { + destination[key] = value + } + } + + if destination.isEmpty { + return nil + } + return destination + } +} diff --git a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache new file mode 100644 index 00000000000..073fbd93be7 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache @@ -0,0 +1,51 @@ +// APIs.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import PromiseKit + +class {{projectName}}API { + static let basePath = "{{^basePathOverride}}{{basePath}}{{/basePathOverride}}{{basePathOverride}}" + static var credential: NSURLCredential? + static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory() + + class APIBase { + } +} + +class RequestBuilder { + var credential: NSURLCredential? + var headers: [String:String] = [:] + let parameters: [String:AnyObject]? + let isBody: Bool + let method: String + let URLString: URLStringConvertible + + required init(method: String, URLString: URLStringConvertible, parameters: [String:AnyObject]?, isBody: Bool) { + self.method = method + self.URLString = URLString + self.parameters = parameters + self.isBody = isBody + } + + func execute() -> Promise> { fatalError("Not implemented") } + + func addHeader(#name: String, value: String) -> Self { + if !value.isEmpty { + headers[name] = value + } + return self + } + + func addCredential() -> Self { + self.credential = OneteamAPI.credential + return self + } +} + +protocol RequestBuilderFactory { + func getBuilder() -> RequestBuilder.Type +} + diff --git a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache new file mode 100644 index 00000000000..8b34587717a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache @@ -0,0 +1,73 @@ +// AlamofireImplementations.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import Alamofire +import PromiseKit + +class AlamofireRequestBuilderFactory: RequestBuilderFactory { + func getBuilder() -> RequestBuilder.Type { + return AlamofireRequestBuilder.self + } +} + +class AlamofireRequestBuilder: RequestBuilder { + required init(method: String, URLString: URLStringConvertible, parameters: [String : AnyObject]?, isBody: Bool) { + super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody) + } + + override func execute() -> Promise> { + let configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() + configuration.HTTPAdditionalHeaders = buildHeaders() + let manager = Alamofire.Manager(configuration: configuration) + let encoding = isBody ? Alamofire.ParameterEncoding.JSON : Alamofire.ParameterEncoding.URL + let request = manager.request(Alamofire.Method(rawValue: method)!, URLString, parameters: parameters, encoding: encoding) + if let credential = self.credential { + request.authenticate(usingCredential: credential) + } + + let defer = Promise>.defer() + request.responseJSON(options: .AllowFragments) { (req, res, json, error) in + if let error = error { + defer.reject(error) + return + } + if res!.statusCode >= 400 { + //TODO: Add error entity + let error = NSError(domain: res!.URL!.URLString, code: res!.statusCode, userInfo: [:]) + defer.reject(error) + return + } + + if Empty.instance is T { + let response = Response(response: res!, body: Empty.instance as! T) + defer.fulfill(response) + return + } + if let json: AnyObject = json { + if let body = T.decode(json) { + let response = Response(response: res!, body: body) + defer.fulfill(response) + } else { + defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "cannot convertible: \(json)"])) + } + return + } + + defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "unreacheable code"])) + } + return defer.promise + } + + private func buildHeaders() -> [String: AnyObject] { + var httpHeaders = Manager.defaultHTTPHeaders + for (key, value) in self.headers { + httpHeaders[key] = value + } + return httpHeaders + } +} + + diff --git a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache new file mode 100644 index 00000000000..245a690a74b --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache @@ -0,0 +1,2 @@ +github "Alamofire/Alamofire" >= 1.2 +github "mxcl/PromiseKit" \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache new file mode 100644 index 00000000000..d0aed716b7e --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -0,0 +1,111 @@ +// Extensions.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import Alamofire +import PromiseKit +import SwiftyJSON + +extension Request { + func responsePromise() -> Promise> { + let defer = Promise>.defer() + responseJSON(options: .AllowFragments) { (req, res, json, error) in + if let error = error { + defer.reject(error) + return + } + if res!.statusCode >= 400 { + let error = NSError(domain: res!.URL!.URLString, code: res!.statusCode, userInfo: [:]) + defer.reject(error) + return + } + + if Empty.instance is T { + let response = Response(response: res!, body: Empty.instance as! T) + defer.fulfill(response) + return + } + if let json: AnyObject = json { + if let body = T.decode(json) { + let response = Response(response: res!, body: body) + defer.fulfill(response) + } else { + defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "cannot convertible: \(json)"])) + } + return + } + + defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "unreacheable code"])) + } + return defer.promise + } +} + +extension Array: JSONEncodable { + func encode() -> AnyObject { + if Element.self is JSONEncodable { + return self.map { ($0 as! JSONEncodable).encode() } + } else { + return self.map { ($0 as! AnyObject) } + } + } +} + +extension JSON { + func decode() -> Bool? { + return self.bool + } + func decode() -> Bool { + return self.boolValue + } + func decode() -> Int? { + return self.int + } + func decode() -> Int { + return self.intValue + } + func decode() -> Float? { + return self.float + } + func decode() -> Float { + return self.floatValue + } + func decode() -> Double? { + return self.double + } + func decode() -> Double { + return self.doubleValue + } + func decode() -> String? { + return self.string + } + func decode() -> String { + return self.stringValue + } + func decode() -> T? { + return T.decode(self.object) + } + func decode() -> [T]? { + return self.arrayObject?.map(T.decode).filter({ $0 != nil }).map({ $0! }) + } + func decode() -> [T]? { + return self.array?.map({ $0 as! T }) + } + static let DateFormat: NSDateFormatter = { + let formatter = NSDateFormatter() + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + return formatter + }() + func decode() -> NSDate? { + return JSON.DateFormat.dateFromString(self.string ?? "") + } + func decode() -> NSData? { + return self.rawData(options: .allZeros, error: nil) + } + func decode() -> NSData { + return self.decode()! + } +} + diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache new file mode 100644 index 00000000000..dd02aa12d70 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -0,0 +1,47 @@ +// Models.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import Foundation +import SwiftyJSON + +protocol JSONDecodable { + static func decode(source: AnyObject) -> Self? +} + +protocol JSONEncodable { + func encode() -> AnyObject +} + +class Response { + let statusCode: Int + let header: [String: String] + let body: T + + init(statusCode: Int, header: [String: String], body: T) { + self.statusCode = statusCode + self.header = header + self.body = body + } + + convenience init(response: NSHTTPURLResponse, body: T) { + let rawHeader = response.allHeaderFields + var header = [String:String]() + for (key, value) in rawHeader { + header[key as! String] = value as? String + } + self.init(statusCode: response.statusCode, header: header, body: body) + } +} + +final class Empty: JSONDecodable { + private init() { } + + static let instance = Empty() + + static func decode(source: AnyObject) -> Empty? { + return instance + } +} diff --git a/modules/swagger-codegen/src/main/resources/swift/api.mustache b/modules/swagger-codegen/src/main/resources/swift/api.mustache new file mode 100644 index 00000000000..0277ec8dfa3 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/api.mustache @@ -0,0 +1,50 @@ +{{#operations}}// +// {{classname}}.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import Alamofire +import PromiseKit + +extension {{projectName}}API { + {{#description}} + /** {{description}} */{{/description}} + class {{classname}}: APIBase { + {{#operation}} + /** + {{#summary}} + {{{summary}}} + {{/summary}} + - {{httpMethod}} {{path}}{{#notes}} + - {{{notes}}}{{/notes}}{{#subresourceOperation}} + - subresourceOperation: {{subresourceOperation}}{{/subresourceOperation}}{{#defaultResponse}} + - defaultResponse: {{defaultResponse}}{{/defaultResponse}}{{#authMethods}} + - authMethods: {{authMethods}}{{/authMethods}}{{#responseHeaders}} + - responseHeaders: {{responseHeaders}}{{/responseHeaders}}{{#examples}} + - examples: {{{examples}}}{{/examples}}{{#externalDocs}} + - externalDocs: {{externalDocs}}{{/externalDocs}}{{#hasParams}} + {{/hasParams}}{{#allParams}} + :param: {{paramName}} ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}}{{/allParams}} + + :returns: Promise> {{description}} + */ + func {{operationId}}({{#allParams}}{{^secondaryParam}}#{{/secondaryParam}}{{paramName}}: {{dataType}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}> { + {{^pathParams}}let{{/pathParams}}{{#pathParams}}{{^secondaryParam}}var{{/secondaryParam}}{{/pathParams}} path = "{{path}}"{{#pathParams}} + path = path.stringByReplacingOccurrencesOfString("{{=<% %>=}}{<%paramName%>}<%={{ }}=%>", withString: "\({{paramName}})", options: .LiteralSearch, range: nil){{/pathParams}} + let url = {{projectName}}API.basePath + path + {{#bodyParam}} + let parameters = {{paramName}}.encode() as! [String:AnyObject]{{/bodyParam}}{{^bodyParam}} + let nillableParameters: [String:AnyObject?] = {{^queryParams}}[:]{{/queryParams}}{{#queryParams}}{{^secondaryParam}}[{{/secondaryParam}} + "{{paramName}}": {{paramName}}{{#hasMore}},{{/hasMore}}{{^hasMore}} + ]{{/hasMore}}{{/queryParams}} + let parameters = APIHelper.rejectNil(nillableParameters){{/bodyParam}} + + return {{projectName}}API.requestBuilderFactory.getBuilder() + (method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}}) + } + {{/operation}} + } +} +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/swift/model.mustache b/modules/swagger-codegen/src/main/resources/swift/model.mustache new file mode 100644 index 00000000000..e9c01fdecc2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/model.mustache @@ -0,0 +1,46 @@ +{{#models}}{{#model}}// +// {{classname}}.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import SwiftyJSON + +extension {{projectName}}API { + {{#description}} + + /** {{description}} */{{/description}} + final class {{classname}}: JSONEncodable, JSONDecodable { + {{#vars}}{{#isEnum}} + enum {{datatypeWithEnum}}: String { {{#allowableValues}}{{#values}} + case {{enum}} = "{{raw}}"{{/values}}{{/allowableValues}} + } + {{/isEnum}}{{/vars}} + {{#vars}}{{#isEnum}}{{#description}}/** {{description}} */ + {{/description}}var {{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}}{{^isEnum}}{{#description}}/** {{description}} */ + {{/description}}var {{name}}: {{{datatype}}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}} + {{/vars}} + + // MARK: JSONDecodable + static func decode(source: AnyObject) -> {{classname}}? { + let json = JSON(source) + var instance = {{classname}}(){{#vars}}{{#isEnum}} + instance.{{name}} = {{datatypeWithEnum}}(rawValue: json["{{name}}"].string ?? ""){{/isEnum}}{{^isEnum}} + instance.{{name}} = json["{{name}}"].decode(){{/isEnum}}{{/vars}} + return instance + } + + // MARK: JSONEncodable + func encode() -> AnyObject { + var nillableDictionary = [String:AnyObject?](){{#vars}}{{#isNotContainer}}{{#isPrimitiveType}}{{^isEnum}} + nillableDictionary["{{name}}"] = self.{{name}}{{/isEnum}}{{/isPrimitiveType}}{{#isEnum}} + nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.rawValue{{/isEnum}}{{^isPrimitiveType}} + nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.encode(){{/isPrimitiveType}}{{/isNotContainer}}{{#isContainer}} + nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.encode(){{/isContainer}}{{/vars}} + let dictionary: [String:AnyObject] = APIHelper.rejectNil(nillableDictionary) ?? [:] + return dictionary + } + }{{/model}} +} +{{/models}} diff --git a/samples/client/petstore/swift/PetstoreClient/Cartfile b/samples/client/petstore/swift/PetstoreClient/Cartfile new file mode 100644 index 00000000000..245a690a74b --- /dev/null +++ b/samples/client/petstore/swift/PetstoreClient/Cartfile @@ -0,0 +1,2 @@ +github "Alamofire/Alamofire" >= 1.2 +github "mxcl/PromiseKit" \ No newline at end of file From 5dfa753f5cf4328f423ec829b11a945212563e66 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Sun, 17 May 2015 19:26:11 +0900 Subject: [PATCH 10/47] Do refactor and add extension methods --- .../codegen/languages/SwiftGenerator.java | 2 +- .../src/main/resources/swift/APIs.mustache | 6 ++-- .../swift/AlamofireImplementations.mustache | 2 +- .../main/resources/swift/Cartfile.mustache | 3 +- .../main/resources/swift/Extensions.mustache | 33 +++++++++++++++++++ .../src/main/resources/swift/api.mustache | 7 ++-- 6 files changed, 44 insertions(+), 9 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java index 39a71449d5e..53097c35736 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java @@ -57,7 +57,7 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { sourceFolder = appName + "/" + sourceFolder; - supportingFiles.add(new SupportingFile("Cartfile.mustache", appName, "Cartfile")); + supportingFiles.add(new SupportingFile("Cartfile.mustache", "", "Cartfile")); supportingFiles.add(new SupportingFile("APIHelper.mustache", sourceFolder, "APIHelper.swift")); supportingFiles.add(new SupportingFile("AlamofireImplementations.mustache", sourceFolder, "AlamofireImplementations.swift")); supportingFiles.add(new SupportingFile("Extensions.mustache", sourceFolder, "Extensions.swift")); diff --git a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache index 073fbd93be7..8e8764514af 100644 --- a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache @@ -21,9 +21,9 @@ class RequestBuilder { let parameters: [String:AnyObject]? let isBody: Bool let method: String - let URLString: URLStringConvertible + let URLString: String - required init(method: String, URLString: URLStringConvertible, parameters: [String:AnyObject]?, isBody: Bool) { + required init(method: String, URLString: String, parameters: [String:AnyObject]?, isBody: Bool) { self.method = method self.URLString = URLString self.parameters = parameters @@ -40,7 +40,7 @@ class RequestBuilder { } func addCredential() -> Self { - self.credential = OneteamAPI.credential + self.credential = {{projectName}}API.credential return self } } diff --git a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache index 8b34587717a..71f47ad67ca 100644 --- a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache @@ -14,7 +14,7 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory { } class AlamofireRequestBuilder: RequestBuilder { - required init(method: String, URLString: URLStringConvertible, parameters: [String : AnyObject]?, isBody: Bool) { + required init(method: String, URLString: String, parameters: [String : AnyObject]?, isBody: Bool) { super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody) } diff --git a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache index 245a690a74b..7259ae3b6d6 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache @@ -1,2 +1,3 @@ github "Alamofire/Alamofire" >= 1.2 -github "mxcl/PromiseKit" \ No newline at end of file +github "mxcl/PromiseKit" >=1.5.3 +github "SwiftyJSON/SwiftyJSON" >= 2.2 diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache index d0aed716b7e..cdf5b90d216 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -43,6 +43,12 @@ extension Request { } } +extension String: JSONDecodable { + static func decode(source: AnyObject) -> String? { + return source.description + } +} + extension Array: JSONEncodable { func encode() -> AnyObject { if Element.self is JSONEncodable { @@ -53,6 +59,33 @@ extension Array: JSONEncodable { } } +extension Dictionary: JSONEncodable, JSONDecodable { + static func decode(source: AnyObject) -> [Key:Value]? { + return nil + } + + func encode() -> AnyObject { + var dictionary = [NSObject:AnyObject]() + for (key, value) in self { + let keyObject: NSObject + if Key.self is JSONEncodable { + keyObject = (key as! JSONEncodable).encode() as! NSObject + } else { + keyObject = key as! NSObject + } + let valueObject: AnyObject + if Value.self is JSONEncodable { + valueObject = (value as! JSONEncodable).encode() + } else { + valueObject = value as! NSObject + } + + dictionary[keyObject] = valueObject + } + return dictionary + } +} + extension JSON { func decode() -> Bool? { return self.bool diff --git a/modules/swagger-codegen/src/main/resources/swift/api.mustache b/modules/swagger-codegen/src/main/resources/swift/api.mustache index 0277ec8dfa3..28f14853fcd 100644 --- a/modules/swagger-codegen/src/main/resources/swift/api.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/api.mustache @@ -35,14 +35,15 @@ extension {{projectName}}API { path = path.stringByReplacingOccurrencesOfString("{{=<% %>=}}{<%paramName%>}<%={{ }}=%>", withString: "\({{paramName}})", options: .LiteralSearch, range: nil){{/pathParams}} let url = {{projectName}}API.basePath + path {{#bodyParam}} - let parameters = {{paramName}}.encode() as! [String:AnyObject]{{/bodyParam}}{{^bodyParam}} + let parameters = {{paramName}}{{^required}}?{{/required}}.encode() as? [String:AnyObject]{{/bodyParam}}{{^bodyParam}} let nillableParameters: [String:AnyObject?] = {{^queryParams}}[:]{{/queryParams}}{{#queryParams}}{{^secondaryParam}}[{{/secondaryParam}} "{{paramName}}": {{paramName}}{{#hasMore}},{{/hasMore}}{{^hasMore}} ]{{/hasMore}}{{/queryParams}} let parameters = APIHelper.rejectNil(nillableParameters){{/bodyParam}} - return {{projectName}}API.requestBuilderFactory.getBuilder() - (method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}}) + let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.getBuilder() + + return requestBuilder(method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}}) } {{/operation}} } From 0b7d758077b4da2ad371078aa8fb4af26648dab9 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Sun, 17 May 2015 22:41:54 +0900 Subject: [PATCH 11/47] Add extension methods for primitives --- .../main/resources/swift/Extensions.mustache | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache index cdf5b90d216..d617431bd53 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -43,9 +43,34 @@ extension Request { } } + +extension Bool: JSONDecodable { + static func decode(source: AnyObject) -> Bool? { + return source as? Bool + } +} + +extension Float: JSONDecodable { + static func decode(source: AnyObject) -> Float? { + return source as? Float + } +} + +extension Int: JSONDecodable { + static func decode(source: AnyObject) -> Int? { + return source as? Int + } +} + +extension Double: JSONDecodable { + static func decode(source: AnyObject) -> Double? { + return source as? Double + } +} + extension String: JSONDecodable { static func decode(source: AnyObject) -> String? { - return source.description + return source as? String } } @@ -59,11 +84,7 @@ extension Array: JSONEncodable { } } -extension Dictionary: JSONEncodable, JSONDecodable { - static func decode(source: AnyObject) -> [Key:Value]? { - return nil - } - +extension Dictionary: JSONEncodable { func encode() -> AnyObject { var dictionary = [NSObject:AnyObject]() for (key, value) in self { From 063e6d062dbc4336b972c5c6b90b0f8facc2b5a8 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Sun, 17 May 2015 22:42:32 +0900 Subject: [PATCH 12/47] Introduce decodable array and dictionary --- .../codegen/languages/SwiftGenerator.java | 6 ++- .../src/main/resources/swift/APIs.mustache | 1 + .../resources/swift/DecodableArray.mustache | 28 ++++++++++++++ .../swift/DecodableDictionary.mustache | 38 +++++++++++++++++++ .../src/main/resources/swift/api.mustache | 2 +- 5 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache create mode 100644 modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java index 53097c35736..cd27383e70f 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java @@ -63,6 +63,8 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("Extensions.mustache", sourceFolder, "Extensions.swift")); supportingFiles.add(new SupportingFile("Models.mustache", sourceFolder, "Models.swift")); supportingFiles.add(new SupportingFile("APIs.mustache", sourceFolder, "APIs.swift")); + supportingFiles.add(new SupportingFile("DecodableDictionary.mustache", sourceFolder, "DecodableDictionary.swift")); + supportingFiles.add(new SupportingFile("DecodableArray.mustache", sourceFolder, "DecodableArray.swift")); languageSpecificPrimitives = new HashSet( Arrays.asList( @@ -138,11 +140,11 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { if (p instanceof ArrayProperty) { ArrayProperty ap = (ArrayProperty) p; Property inner = ap.getItems(); - return "[" + getTypeDeclaration(inner) + "]"; + return "DecodableArray<" + getTypeDeclaration(inner) + ">"; } else if (p instanceof MapProperty) { MapProperty mp = (MapProperty) p; Property inner = mp.getAdditionalProperties(); - return "[String:" + getTypeDeclaration(inner) + "]"; + return "DecodableDictionary"; } return super.getTypeDeclaration(p); } diff --git a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache index 8e8764514af..22c1490423a 100644 --- a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache @@ -4,6 +4,7 @@ // https://github.com/swagger-api/swagger-codegen // +import Foundation import PromiseKit class {{projectName}}API { diff --git a/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache b/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache new file mode 100644 index 00000000000..6af73c74010 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache @@ -0,0 +1,28 @@ +// DecodableArray.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + + +final class DecodableArray: JSONEncodable, JSONDecodable, ArrayLiteralConvertible { + let value: [T] + + required init(arrayLiteral elements: T...) { + self.value = elements + } + + init(array elements: [T]) { + self.value = elements + } + + static func decode(source: AnyObject) -> DecodableArray? { + let array = source as! [AnyObject] + let decodedArray = DecodableArray(array: array.map({ T.decode($0)! })) + return decodedArray + } + + func encode() -> AnyObject { + return value.encode() + } +} diff --git a/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache b/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache new file mode 100644 index 00000000000..4463b60eec8 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache @@ -0,0 +1,38 @@ +// DecodableDictionary.swift +// +// Generated by swagger-codegen +// https://github.com/swagger-api/swagger-codegen +// + +import Foundation + +final class DecodableDictionary: JSONEncodable, JSONDecodable, DictionaryLiteralConvertible { + let value: [Key:Value] + + init(dictionaryLiteral elements: (Key, Value)...) { + var dic = [Key:Value]() + for (key, value) in elements { + dic[key] = value + } + self.value = dic + } + + init(dictionary elements: [Key:Value]) { + self.value = elements + } + + static func decode(source: AnyObject) -> DecodableDictionary? { + var destination = [Key:Value]() + let dictionary = source as! [NSObject:AnyObject] + for (key, value) in dictionary { + let decodedKey = Key.decode(key)! + let decodedValue = Value.decode(value)! + destination[decodedKey] = decodedValue + } + return DecodableDictionary(dictionary: destination) + } + + func encode() -> AnyObject { + return value.encode() + } +} diff --git a/modules/swagger-codegen/src/main/resources/swift/api.mustache b/modules/swagger-codegen/src/main/resources/swift/api.mustache index 28f14853fcd..e4961e2e835 100644 --- a/modules/swagger-codegen/src/main/resources/swift/api.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/api.mustache @@ -30,7 +30,7 @@ extension {{projectName}}API { :returns: Promise> {{description}} */ - func {{operationId}}({{#allParams}}{{^secondaryParam}}#{{/secondaryParam}}{{paramName}}: {{dataType}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}> { + func {{operationId}}({{#allParams}}{{^secondaryParam}}#{{/secondaryParam}}{{paramName}}: {{{dataType}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}> { {{^pathParams}}let{{/pathParams}}{{#pathParams}}{{^secondaryParam}}var{{/secondaryParam}}{{/pathParams}} path = "{{path}}"{{#pathParams}} path = path.stringByReplacingOccurrencesOfString("{{=<% %>=}}{<%paramName%>}<%={{ }}=%>", withString: "\({{paramName}})", options: .LiteralSearch, range: nil){{/pathParams}} let url = {{projectName}}API.basePath + path From f21d8503d5f514ce03454ba90111f756962ad250 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Sun, 17 May 2015 22:43:16 +0900 Subject: [PATCH 13/47] Add manager storage to prevent request cancellation --- .../resources/swift/AlamofireImplementations.mustache | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache index 71f47ad67ca..78ab1c8f3cf 100644 --- a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache @@ -13,15 +13,22 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory { } } +// Store manager to retain its reference +private var managerStore: [String: Alamofire.Manager] = [:] + class AlamofireRequestBuilder: RequestBuilder { required init(method: String, URLString: String, parameters: [String : AnyObject]?, isBody: Bool) { super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody) } override func execute() -> Promise> { - let configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() + let managerId = NSUUID().UUIDString + // Create a new manager for each request to customize its request header + let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.HTTPAdditionalHeaders = buildHeaders() let manager = Alamofire.Manager(configuration: configuration) + managerStore[managerId] = manager + let encoding = isBody ? Alamofire.ParameterEncoding.JSON : Alamofire.ParameterEncoding.URL let request = manager.request(Alamofire.Method(rawValue: method)!, URLString, parameters: parameters, encoding: encoding) if let credential = self.credential { @@ -30,6 +37,8 @@ class AlamofireRequestBuilder: RequestBuilder { let defer = Promise>.defer() request.responseJSON(options: .AllowFragments) { (req, res, json, error) in + managerStore.removeValueForKey(managerId) + if let error = error { defer.reject(error) return From be7fccce684b4837456545c1b871c4052deecc70 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Mon, 18 May 2015 10:43:11 +0900 Subject: [PATCH 14/47] Update JSONEncodable implementations --- .../resources/swift/DecodableArray.mustache | 4 +- .../swift/DecodableDictionary.mustache | 10 +++- .../main/resources/swift/Extensions.mustache | 48 ++++--------------- 3 files changed, 20 insertions(+), 42 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache b/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache index 6af73c74010..4c658f08f9b 100644 --- a/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache @@ -5,7 +5,7 @@ // -final class DecodableArray: JSONEncodable, JSONDecodable, ArrayLiteralConvertible { +final class DecodableArray: JSONEncodable, JSONDecodable, ArrayLiteralConvertible { let value: [T] required init(arrayLiteral elements: T...) { @@ -23,6 +23,6 @@ final class DecodableArray: JSONEncodable, JSONDecodable, Arr } func encode() -> AnyObject { - return value.encode() + return value.map { $0.encode() } } } diff --git a/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache b/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache index 4463b60eec8..f22115227cd 100644 --- a/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache @@ -6,7 +6,7 @@ import Foundation -final class DecodableDictionary: JSONEncodable, JSONDecodable, DictionaryLiteralConvertible { +final class DecodableDictionary: JSONEncodable, JSONDecodable, DictionaryLiteralConvertible { let value: [Key:Value] init(dictionaryLiteral elements: (Key, Value)...) { @@ -33,6 +33,12 @@ final class DecodableDictionary AnyObject { - return value.encode() + var destination = [String: AnyObject]() + for (key, value) in self.value { + let keyStr = "\(key.encode())" + let valueObj: AnyObject = value.encode() + destination[keyStr] = valueObj + } + return destination } } diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache index d617431bd53..cfbdcdb7e6b 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -44,67 +44,39 @@ extension Request { } -extension Bool: JSONDecodable { +extension Bool: JSONEncodable, JSONDecodable { static func decode(source: AnyObject) -> Bool? { return source as? Bool } + func encode() -> AnyObject { return self } } -extension Float: JSONDecodable { +extension Float: JSONEncodable, JSONDecodable { static func decode(source: AnyObject) -> Float? { return source as? Float } + func encode() -> AnyObject { return self } } -extension Int: JSONDecodable { +extension Int: JSONEncodable, JSONDecodable { static func decode(source: AnyObject) -> Int? { return source as? Int } + func encode() -> AnyObject { return self } } -extension Double: JSONDecodable { +extension Double: JSONEncodable, JSONDecodable { static func decode(source: AnyObject) -> Double? { return source as? Double } + func encode() -> AnyObject { return self } } -extension String: JSONDecodable { +extension String: JSONEncodable, JSONDecodable { static func decode(source: AnyObject) -> String? { return source as? String } -} - -extension Array: JSONEncodable { - func encode() -> AnyObject { - if Element.self is JSONEncodable { - return self.map { ($0 as! JSONEncodable).encode() } - } else { - return self.map { ($0 as! AnyObject) } - } - } -} - -extension Dictionary: JSONEncodable { - func encode() -> AnyObject { - var dictionary = [NSObject:AnyObject]() - for (key, value) in self { - let keyObject: NSObject - if Key.self is JSONEncodable { - keyObject = (key as! JSONEncodable).encode() as! NSObject - } else { - keyObject = key as! NSObject - } - let valueObject: AnyObject - if Value.self is JSONEncodable { - valueObject = (value as! JSONEncodable).encode() - } else { - valueObject = value as! NSObject - } - - dictionary[keyObject] = valueObject - } - return dictionary - } + func encode() -> AnyObject { return self } } extension JSON { From bb3ec04ed15e3d1c301324b5de128d19e2dca78b Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Mon, 18 May 2015 17:26:41 +0900 Subject: [PATCH 15/47] Introduce Decoders class --- .../codegen/languages/SwiftGenerator.java | 6 +- .../src/main/resources/swift/APIs.mustache | 17 ++++- .../swift/AlamofireImplementations.mustache | 19 +++--- .../resources/swift/DecodableArray.mustache | 28 --------- .../swift/DecodableDictionary.mustache | 44 ------------- .../main/resources/swift/Extensions.mustache | 63 ++----------------- .../src/main/resources/swift/Models.mustache | 47 ++++++++++---- .../src/main/resources/swift/api.mustache | 6 +- .../src/main/resources/swift/model.mustache | 5 +- 9 files changed, 71 insertions(+), 164 deletions(-) delete mode 100644 modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache delete mode 100644 modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java index cd27383e70f..53097c35736 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java @@ -63,8 +63,6 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("Extensions.mustache", sourceFolder, "Extensions.swift")); supportingFiles.add(new SupportingFile("Models.mustache", sourceFolder, "Models.swift")); supportingFiles.add(new SupportingFile("APIs.mustache", sourceFolder, "APIs.swift")); - supportingFiles.add(new SupportingFile("DecodableDictionary.mustache", sourceFolder, "DecodableDictionary.swift")); - supportingFiles.add(new SupportingFile("DecodableArray.mustache", sourceFolder, "DecodableArray.swift")); languageSpecificPrimitives = new HashSet( Arrays.asList( @@ -140,11 +138,11 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { if (p instanceof ArrayProperty) { ArrayProperty ap = (ArrayProperty) p; Property inner = ap.getItems(); - return "DecodableArray<" + getTypeDeclaration(inner) + ">"; + return "[" + getTypeDeclaration(inner) + "]"; } else if (p instanceof MapProperty) { MapProperty mp = (MapProperty) p; Property inner = mp.getAdditionalProperties(); - return "DecodableDictionary"; + return "[String:" + getTypeDeclaration(inner) + "]"; } return super.getTypeDeclaration(p); } diff --git a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache index 22c1490423a..841d6c03888 100644 --- a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache @@ -13,10 +13,23 @@ class {{projectName}}API { static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory() class APIBase { + func toParameters(encodable: JSONEncodable?) -> [String: AnyObject]? { + let encoded: AnyObject? = encodable?.encode() + + if encoded! is [AnyObject] { + var dictionary = [String:AnyObject]() + for (index, item) in enumerate(encoded as! [AnyObject]) { + dictionary["\(index)"] = item + } + return dictionary + } else { + return encoded as? [String:AnyObject] + } + } } } -class RequestBuilder { +class RequestBuilder { var credential: NSURLCredential? var headers: [String:String] = [:] let parameters: [String:AnyObject]? @@ -47,6 +60,6 @@ class RequestBuilder { } protocol RequestBuilderFactory { - func getBuilder() -> RequestBuilder.Type + func getBuilder() -> RequestBuilder.Type } diff --git a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache index 78ab1c8f3cf..244d816332c 100644 --- a/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/AlamofireImplementations.mustache @@ -8,7 +8,7 @@ import Alamofire import PromiseKit class AlamofireRequestBuilderFactory: RequestBuilderFactory { - func getBuilder() -> RequestBuilder.Type { + func getBuilder() -> RequestBuilder.Type { return AlamofireRequestBuilder.self } } @@ -16,7 +16,7 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory { // Store manager to retain its reference private var managerStore: [String: Alamofire.Manager] = [:] -class AlamofireRequestBuilder: RequestBuilder { +class AlamofireRequestBuilder: RequestBuilder { required init(method: String, URLString: String, parameters: [String : AnyObject]?, isBody: Bool) { super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody) } @@ -49,19 +49,16 @@ class AlamofireRequestBuilder: RequestBuilder { defer.reject(error) return } - - if Empty.instance is T { - let response = Response(response: res!, body: Empty.instance as! T) + + if () is T { + let response = Response(response: res!, body: () as! T) defer.fulfill(response) return } if let json: AnyObject = json { - if let body = T.decode(json) { - let response = Response(response: res!, body: body) - defer.fulfill(response) - } else { - defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "cannot convertible: \(json)"])) - } + let body = Decoders.decode(clazz: T.self, source: json) + let response = Response(response: res!, body: body) + defer.fulfill(response) return } diff --git a/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache b/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache deleted file mode 100644 index 4c658f08f9b..00000000000 --- a/modules/swagger-codegen/src/main/resources/swift/DecodableArray.mustache +++ /dev/null @@ -1,28 +0,0 @@ -// DecodableArray.swift -// -// Generated by swagger-codegen -// https://github.com/swagger-api/swagger-codegen -// - - -final class DecodableArray: JSONEncodable, JSONDecodable, ArrayLiteralConvertible { - let value: [T] - - required init(arrayLiteral elements: T...) { - self.value = elements - } - - init(array elements: [T]) { - self.value = elements - } - - static func decode(source: AnyObject) -> DecodableArray? { - let array = source as! [AnyObject] - let decodedArray = DecodableArray(array: array.map({ T.decode($0)! })) - return decodedArray - } - - func encode() -> AnyObject { - return value.map { $0.encode() } - } -} diff --git a/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache b/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache deleted file mode 100644 index f22115227cd..00000000000 --- a/modules/swagger-codegen/src/main/resources/swift/DecodableDictionary.mustache +++ /dev/null @@ -1,44 +0,0 @@ -// DecodableDictionary.swift -// -// Generated by swagger-codegen -// https://github.com/swagger-api/swagger-codegen -// - -import Foundation - -final class DecodableDictionary: JSONEncodable, JSONDecodable, DictionaryLiteralConvertible { - let value: [Key:Value] - - init(dictionaryLiteral elements: (Key, Value)...) { - var dic = [Key:Value]() - for (key, value) in elements { - dic[key] = value - } - self.value = dic - } - - init(dictionary elements: [Key:Value]) { - self.value = elements - } - - static func decode(source: AnyObject) -> DecodableDictionary? { - var destination = [Key:Value]() - let dictionary = source as! [NSObject:AnyObject] - for (key, value) in dictionary { - let decodedKey = Key.decode(key)! - let decodedValue = Value.decode(value)! - destination[decodedKey] = decodedValue - } - return DecodableDictionary(dictionary: destination) - } - - func encode() -> AnyObject { - var destination = [String: AnyObject]() - for (key, value) in self.value { - let keyStr = "\(key.encode())" - let valueObj: AnyObject = value.encode() - destination[keyStr] = valueObj - } - return destination - } -} diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache index cfbdcdb7e6b..62e22dcf7a8 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -9,73 +9,26 @@ import PromiseKit import SwiftyJSON extension Request { - func responsePromise() -> Promise> { - let defer = Promise>.defer() - responseJSON(options: .AllowFragments) { (req, res, json, error) in - if let error = error { - defer.reject(error) - return - } - if res!.statusCode >= 400 { - let error = NSError(domain: res!.URL!.URLString, code: res!.statusCode, userInfo: [:]) - defer.reject(error) - return - } - - if Empty.instance is T { - let response = Response(response: res!, body: Empty.instance as! T) - defer.fulfill(response) - return - } - if let json: AnyObject = json { - if let body = T.decode(json) { - let response = Response(response: res!, body: body) - defer.fulfill(response) - } else { - defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "cannot convertible: \(json)"])) - } - return - } - - defer.reject(NSError(domain: "localhost", code: 500, userInfo: ["reason": "unreacheable code"])) - } - return defer.promise - } } -extension Bool: JSONEncodable, JSONDecodable { - static func decode(source: AnyObject) -> Bool? { - return source as? Bool - } +extension Bool: JSONEncodable { func encode() -> AnyObject { return self } } -extension Float: JSONEncodable, JSONDecodable { - static func decode(source: AnyObject) -> Float? { - return source as? Float - } +extension Float: JSONEncodable { func encode() -> AnyObject { return self } } -extension Int: JSONEncodable, JSONDecodable { - static func decode(source: AnyObject) -> Int? { - return source as? Int - } +extension Int: JSONEncodable { func encode() -> AnyObject { return self } } -extension Double: JSONEncodable, JSONDecodable { - static func decode(source: AnyObject) -> Double? { - return source as? Double - } +extension Double: JSONEncodable { func encode() -> AnyObject { return self } } -extension String: JSONEncodable, JSONDecodable { - static func decode(source: AnyObject) -> String? { - return source as? String - } +extension String: JSONEncodable { func encode() -> AnyObject { return self } } @@ -110,12 +63,6 @@ extension JSON { func decode() -> String { return self.stringValue } - func decode() -> T? { - return T.decode(self.object) - } - func decode() -> [T]? { - return self.arrayObject?.map(T.decode).filter({ $0 != nil }).map({ $0! }) - } func decode() -> [T]? { return self.array?.map({ $0 as! T }) } diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index dd02aa12d70..f4bbfecc779 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -5,17 +5,12 @@ // import Foundation -import SwiftyJSON - -protocol JSONDecodable { - static func decode(source: AnyObject) -> Self? -} protocol JSONEncodable { func encode() -> AnyObject } -class Response { +class Response { let statusCode: Int let header: [String: String] let body: T @@ -36,12 +31,38 @@ class Response { } } -final class Empty: JSONDecodable { - private init() { } - - static let instance = Empty() - - static func decode(source: AnyObject) -> Empty? { - return instance +class Decoders { + static private var decoders = Dictionary AnyObject)>() + + static func addDecoder(#clazz: T.Type, decoder: ((AnyObject) -> T)) { + let key = "\(T.self)" + decoders[key] = { decoder($0) as! AnyObject } + } + + static func decode(#clazz: [T].Type, source: AnyObject) -> [T] { + let array = source as! [AnyObject] + return array.map { Decoders.decode(clazz: T.self, source: $0) } + } + + static func decode(#clazz: [Key:T].Type, source: AnyObject) -> [Key:T] { + let sourceDictinoary = source as! [Key: AnyObject] + var dictionary = [Key:T]() + for (key, value) in sourceDictinoary { + dictionary[key] = Decoders.decode(clazz: T.self, source: value) + } + return dictionary + } + + static func decode(#clazz: T.Type, source: AnyObject) -> T { + if source is T { + return source as! T + } + + let key = "\(T.self)" + if let decoder = decoders[key] { + return decoder(source) as! T + } else { + fatalError("Source \(source) is not convertible to type \(clazz): Maybe swagger file is insufficient") + } } } diff --git a/modules/swagger-codegen/src/main/resources/swift/api.mustache b/modules/swagger-codegen/src/main/resources/swift/api.mustache index e4961e2e835..e24bdae6773 100644 --- a/modules/swagger-codegen/src/main/resources/swift/api.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/api.mustache @@ -28,9 +28,9 @@ extension {{projectName}}API { {{/hasParams}}{{#allParams}} :param: {{paramName}} ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}}{{/allParams}} - :returns: Promise> {{description}} + :returns: Promise> {{description}} */ - func {{operationId}}({{#allParams}}{{^secondaryParam}}#{{/secondaryParam}}{{paramName}}: {{{dataType}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}> { + func {{operationId}}({{#allParams}}{{^secondaryParam}}#{{/secondaryParam}}{{paramName}}: {{{dataType}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> { {{^pathParams}}let{{/pathParams}}{{#pathParams}}{{^secondaryParam}}var{{/secondaryParam}}{{/pathParams}} path = "{{path}}"{{#pathParams}} path = path.stringByReplacingOccurrencesOfString("{{=<% %>=}}{<%paramName%>}<%={{ }}=%>", withString: "\({{paramName}})", options: .LiteralSearch, range: nil){{/pathParams}} let url = {{projectName}}API.basePath + path @@ -41,7 +41,7 @@ extension {{projectName}}API { ]{{/hasMore}}{{/queryParams}} let parameters = APIHelper.rejectNil(nillableParameters){{/bodyParam}} - let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.getBuilder() return requestBuilder(method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}}) } diff --git a/modules/swagger-codegen/src/main/resources/swift/model.mustache b/modules/swagger-codegen/src/main/resources/swift/model.mustache index e9c01fdecc2..a47b2909b73 100644 --- a/modules/swagger-codegen/src/main/resources/swift/model.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/model.mustache @@ -7,11 +7,14 @@ import SwiftyJSON +extension JSON { +} + extension {{projectName}}API { {{#description}} /** {{description}} */{{/description}} - final class {{classname}}: JSONEncodable, JSONDecodable { + final class {{classname}}: JSONEncodable { {{#vars}}{{#isEnum}} enum {{datatypeWithEnum}}: String { {{#allowableValues}}{{#values}} case {{enum}} = "{{raw}}"{{/values}}{{/allowableValues}} From dbfc46658f64f209c0a4f7bbeff25dc3f5f547e3 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Mon, 18 May 2015 17:31:57 +0900 Subject: [PATCH 16/47] Add once-removed Array extension method --- .../src/main/resources/swift/Extensions.mustache | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache index 62e22dcf7a8..e21bec5d53e 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -8,10 +8,6 @@ import Alamofire import PromiseKit import SwiftyJSON -extension Request { -} - - extension Bool: JSONEncodable { func encode() -> AnyObject { return self } } @@ -32,6 +28,16 @@ extension String: JSONEncodable { func encode() -> AnyObject { return self } } +extension Array: JSONEncodable { + func encode() -> AnyObject { + if Element.self is JSONEncodable { + return self.map { ($0 as! JSONEncodable).encode() } + } else { + return self.map { ($0 as! AnyObject) } + } + } +} + extension JSON { func decode() -> Bool? { return self.bool From e0c0d2a72a3cfdbfb18f7dbb4760f491c7a5b419 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Mon, 18 May 2015 21:28:41 +0900 Subject: [PATCH 17/47] Remove dependency on SwiftyJSON --- .../src/main/resources/swift/APIs.mustache | 25 ++++--- .../main/resources/swift/Extensions.mustache | 74 +++++-------------- .../src/main/resources/swift/Models.mustache | 42 +++++++++++ .../src/main/resources/swift/model.mustache | 62 ++++++---------- 4 files changed, 97 insertions(+), 106 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache index 841d6c03888..aa39ccfcbdd 100644 --- a/modules/swagger-codegen/src/main/resources/swift/APIs.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/APIs.mustache @@ -11,20 +11,20 @@ class {{projectName}}API { static let basePath = "{{^basePathOverride}}{{basePath}}{{/basePathOverride}}{{basePathOverride}}" static var credential: NSURLCredential? static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory() +} - class APIBase { - func toParameters(encodable: JSONEncodable?) -> [String: AnyObject]? { - let encoded: AnyObject? = encodable?.encode() - - if encoded! is [AnyObject] { - var dictionary = [String:AnyObject]() - for (index, item) in enumerate(encoded as! [AnyObject]) { - dictionary["\(index)"] = item - } - return dictionary - } else { - return encoded as? [String:AnyObject] +class APIBase { + func toParameters(encodable: JSONEncodable?) -> [String: AnyObject]? { + let encoded: AnyObject? = encodable?.encode() + + if encoded! is [AnyObject] { + var dictionary = [String:AnyObject]() + for (index, item) in enumerate(encoded as! [AnyObject]) { + dictionary["\(index)"] = item } + return dictionary + } else { + return encoded as? [String:AnyObject] } } } @@ -63,3 +63,4 @@ protocol RequestBuilderFactory { func getBuilder() -> RequestBuilder.Type } + diff --git a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache index e21bec5d53e..c937db23fe3 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Extensions.mustache @@ -6,7 +6,6 @@ import Alamofire import PromiseKit -import SwiftyJSON extension Bool: JSONEncodable { func encode() -> AnyObject { return self } @@ -28,63 +27,26 @@ extension String: JSONEncodable { func encode() -> AnyObject { return self } } +private func encodeIfPossible(object: T) -> AnyObject { + if object is JSONEncodable { + return (object as! JSONEncodable).encode() + } else { + return object as! AnyObject + } +} + extension Array: JSONEncodable { func encode() -> AnyObject { - if Element.self is JSONEncodable { - return self.map { ($0 as! JSONEncodable).encode() } - } else { - return self.map { ($0 as! AnyObject) } + return self.map(encodeIfPossible) + } +} + +extension Dictionary: JSONEncodable { + func encode() -> AnyObject { + var dictionary = [NSObject:AnyObject]() + for (key, value) in self { + dictionary[key as! NSObject] = encodeIfPossible(value) } + return dictionary } } - -extension JSON { - func decode() -> Bool? { - return self.bool - } - func decode() -> Bool { - return self.boolValue - } - func decode() -> Int? { - return self.int - } - func decode() -> Int { - return self.intValue - } - func decode() -> Float? { - return self.float - } - func decode() -> Float { - return self.floatValue - } - func decode() -> Double? { - return self.double - } - func decode() -> Double { - return self.doubleValue - } - func decode() -> String? { - return self.string - } - func decode() -> String { - return self.stringValue - } - func decode() -> [T]? { - return self.array?.map({ $0 as! T }) - } - static let DateFormat: NSDateFormatter = { - let formatter = NSDateFormatter() - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" - return formatter - }() - func decode() -> NSDate? { - return JSON.DateFormat.dateFromString(self.string ?? "") - } - func decode() -> NSData? { - return self.rawData(options: .allZeros, error: nil) - } - func decode() -> NSData { - return self.decode()! - } -} - diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index f4bbfecc779..8bdd72577db 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -31,6 +31,7 @@ class Response { } } +private var once = dispatch_once_t() class Decoders { static private var decoders = Dictionary AnyObject)>() @@ -54,6 +55,7 @@ class Decoders { } static func decode(#clazz: T.Type, source: AnyObject) -> T { + initialize() if source is T { return source as! T } @@ -65,4 +67,44 @@ class Decoders { fatalError("Source \(source) is not convertible to type \(clazz): Maybe swagger file is insufficient") } } + + static func decodeOptional(#clazz: T.Type, source: AnyObject?) -> T? { + return source.map { (source: AnyObject) -> T in + Decoders.decode(clazz: clazz, source: source) + } + } + + static func decodeOptional(#clazz: [T].Type, source: AnyObject?) -> [T]? { + return source.map { (someSource: AnyObject) -> [T] in + Decoders.decode(clazz: clazz, source: someSource) + } + } + + static func decodeOptional(#clazz: [Key:T].Type, source: AnyObject?) -> [Key:T]? { + return source.map { (someSource: AnyObject) -> [Key:T] in + Decoders.decode(clazz: clazz, source: someSource) + } + } + + static private func initialize() { + dispatch_once(&once) { + let formatter = NSDateFormatter() + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + // Decoder for NSDate + Decoders.addDecoder(clazz: NSDate.self) { (source: AnyObject) -> NSDate in + let sourceString = source as! String + return formatter.dateFromString(sourceString)! + } {{#models}}{{#model}} + + // Decoder for {{{classname}}} + Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject) -> {{{classname}}} in + let sourceDictionary = source as! [NSObject:AnyObject] + var instance = {{classname}}(){{#vars}}{{#isEnum}} + instance.{{name}} = (sourceDictionary["{{name}}"] as? String).map { {{classname}}.{{datatypeWithEnum}}(rawValue: $0)! } {{#required}}!{{/required}} {{/isEnum}}{{^isEnum}} + instance.{{name}} = Decoders.decode{{^required}}Optional{{/required}}(clazz: {{{baseType}}}.self, source: sourceDictionary["{{name}}"]{{#required}}!{{/required}}){{/isEnum}}{{/vars}} + return instance + }{{/model}} + {{/models}} + } + } } diff --git a/modules/swagger-codegen/src/main/resources/swift/model.mustache b/modules/swagger-codegen/src/main/resources/swift/model.mustache index a47b2909b73..1ecd21a065a 100644 --- a/modules/swagger-codegen/src/main/resources/swift/model.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/model.mustache @@ -5,45 +5,31 @@ // https://github.com/swagger-api/swagger-codegen // -import SwiftyJSON +import Foundation -extension JSON { -} +{{#description}} -extension {{projectName}}API { - {{#description}} +/** {{description}} */{{/description}} +final class {{classname}}: JSONEncodable { +{{#vars}}{{#isEnum}} + enum {{datatypeWithEnum}}: String { {{#allowableValues}}{{#values}} + case {{enum}} = "{{raw}}"{{/values}}{{/allowableValues}} + } + {{/isEnum}}{{/vars}} + {{#vars}}{{#isEnum}}{{#description}}/** {{description}} */ + {{/description}}var {{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}}{{^isEnum}}{{#description}}/** {{description}} */ + {{/description}}var {{name}}: {{{datatype}}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}} + {{/vars}} - /** {{description}} */{{/description}} - final class {{classname}}: JSONEncodable { - {{#vars}}{{#isEnum}} - enum {{datatypeWithEnum}}: String { {{#allowableValues}}{{#values}} - case {{enum}} = "{{raw}}"{{/values}}{{/allowableValues}} - } - {{/isEnum}}{{/vars}} - {{#vars}}{{#isEnum}}{{#description}}/** {{description}} */ - {{/description}}var {{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}}{{^isEnum}}{{#description}}/** {{description}} */ - {{/description}}var {{name}}: {{{datatype}}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/isEnum}} - {{/vars}} - - // MARK: JSONDecodable - static func decode(source: AnyObject) -> {{classname}}? { - let json = JSON(source) - var instance = {{classname}}(){{#vars}}{{#isEnum}} - instance.{{name}} = {{datatypeWithEnum}}(rawValue: json["{{name}}"].string ?? ""){{/isEnum}}{{^isEnum}} - instance.{{name}} = json["{{name}}"].decode(){{/isEnum}}{{/vars}} - return instance - } - - // MARK: JSONEncodable - func encode() -> AnyObject { - var nillableDictionary = [String:AnyObject?](){{#vars}}{{#isNotContainer}}{{#isPrimitiveType}}{{^isEnum}} - nillableDictionary["{{name}}"] = self.{{name}}{{/isEnum}}{{/isPrimitiveType}}{{#isEnum}} - nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.rawValue{{/isEnum}}{{^isPrimitiveType}} - nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.encode(){{/isPrimitiveType}}{{/isNotContainer}}{{#isContainer}} - nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.encode(){{/isContainer}}{{/vars}} - let dictionary: [String:AnyObject] = APIHelper.rejectNil(nillableDictionary) ?? [:] - return dictionary - } - }{{/model}} -} + // MARK: JSONEncodable + func encode() -> AnyObject { + var nillableDictionary = [String:AnyObject?](){{#vars}}{{#isNotContainer}}{{#isPrimitiveType}}{{^isEnum}} + nillableDictionary["{{name}}"] = self.{{name}}{{/isEnum}}{{/isPrimitiveType}}{{#isEnum}} + nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.rawValue{{/isEnum}}{{^isPrimitiveType}} + nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.encode(){{/isPrimitiveType}}{{/isNotContainer}}{{#isContainer}} + nillableDictionary["{{name}}"] = self.{{name}}{{^required}}?{{/required}}.encode(){{/isContainer}}{{/vars}} + let dictionary: [String:AnyObject] = APIHelper.rejectNil(nillableDictionary) ?? [:] + return dictionary + } +}{{/model}} {{/models}} From 3623a0dd56c5eb1299d2a94f65a6f97ca95d1061 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Mon, 18 May 2015 21:30:37 +0900 Subject: [PATCH 18/47] Modify Cartfile --- .../swagger-codegen/src/main/resources/swift/Cartfile.mustache | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache index 7259ae3b6d6..af74617bcf2 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Cartfile.mustache @@ -1,3 +1,2 @@ github "Alamofire/Alamofire" >= 1.2 github "mxcl/PromiseKit" >=1.5.3 -github "SwiftyJSON/SwiftyJSON" >= 2.2 From 9cf1835230b82991d2e4651b8895b62f2f0a3d02 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Mon, 18 May 2015 21:59:11 +0900 Subject: [PATCH 19/47] Fix bug --- .../com/wordnik/swagger/codegen/languages/SwiftGenerator.java | 1 + .../swagger-codegen/src/main/resources/swift/Models.mustache | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java index 53097c35736..e763c51e1ac 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/SwiftGenerator.java @@ -99,6 +99,7 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig { typeMapping.put("array", "Array"); typeMapping.put("List", "Array"); typeMapping.put("map", "Dictionary"); + typeMapping.put("date", "NSDate"); typeMapping.put("Date", "NSDate"); typeMapping.put("DateTime", "NSDate"); typeMapping.put("boolean", "Bool"); diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index 8bdd72577db..100ba1f4c2d 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -100,7 +100,7 @@ class Decoders { Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject) -> {{{classname}}} in let sourceDictionary = source as! [NSObject:AnyObject] var instance = {{classname}}(){{#vars}}{{#isEnum}} - instance.{{name}} = (sourceDictionary["{{name}}"] as? String).map { {{classname}}.{{datatypeWithEnum}}(rawValue: $0)! } {{#required}}!{{/required}} {{/isEnum}}{{^isEnum}} + instance.{{name}} = (sourceDictionary["{{name}}"] as? String).map { {{classname}}.{{datatypeWithEnum}}(rawValue: $0)! }{{#required}}!{{/required}} {{/isEnum}}{{^isEnum}} instance.{{name}} = Decoders.decode{{^required}}Optional{{/required}}(clazz: {{{baseType}}}.self, source: sourceDictionary["{{name}}"]{{#required}}!{{/required}}){{/isEnum}}{{/vars}} return instance }{{/model}} From 16a4b60526fc224b1067062044a6f3e16b056c0b Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Tue, 19 May 2015 10:06:54 +0900 Subject: [PATCH 20/47] Handle NSNull --- .../src/main/resources/swift/Models.mustache | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index 100ba1f4c2d..d3b00df53ae 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -69,18 +69,27 @@ class Decoders { } static func decodeOptional(#clazz: T.Type, source: AnyObject?) -> T? { + if source is NSNull { + return nil + } return source.map { (source: AnyObject) -> T in Decoders.decode(clazz: clazz, source: source) } } static func decodeOptional(#clazz: [T].Type, source: AnyObject?) -> [T]? { + if source is NSNull { + return nil + } return source.map { (someSource: AnyObject) -> [T] in Decoders.decode(clazz: clazz, source: someSource) } } static func decodeOptional(#clazz: [Key:T].Type, source: AnyObject?) -> [Key:T]? { + if source is NSNull { + return nil + } return source.map { (someSource: AnyObject) -> [Key:T] in Decoders.decode(clazz: clazz, source: someSource) } From 2f6b975669c045186d6fa0156b7ebbb5f27087cd Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Tue, 19 May 2015 10:07:06 +0900 Subject: [PATCH 21/47] Remove final mark --- modules/swagger-codegen/src/main/resources/swift/model.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/model.mustache b/modules/swagger-codegen/src/main/resources/swift/model.mustache index 1ecd21a065a..a964882c97c 100644 --- a/modules/swagger-codegen/src/main/resources/swift/model.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/model.mustache @@ -10,7 +10,7 @@ import Foundation {{#description}} /** {{description}} */{{/description}} -final class {{classname}}: JSONEncodable { +class {{classname}}: JSONEncodable { {{#vars}}{{#isEnum}} enum {{datatypeWithEnum}}: String { {{#allowableValues}}{{#values}} case {{enum}} = "{{raw}}"{{/values}}{{/allowableValues}} From 72054078184c30a5a2d42afd2b5abe21288def9b Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Tue, 19 May 2015 10:07:40 +0900 Subject: [PATCH 22/47] Add another date formatter (which should be externalized though) --- .../src/main/resources/swift/Models.mustache | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index d3b00df53ae..37c497ddcb9 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -97,12 +97,17 @@ class Decoders { static private func initialize() { dispatch_once(&once) { - let formatter = NSDateFormatter() - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + let dateTimeFormatter = NSDateFormatter() + dateTimeFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + let dateFormatter = NSDateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" // Decoder for NSDate Decoders.addDecoder(clazz: NSDate.self) { (source: AnyObject) -> NSDate in let sourceString = source as! String - return formatter.dateFromString(sourceString)! + if count(sourceString) == 10 { + return dateFormatter.dateFromString(sourceString)! + } + return dateTimeFormatter.dateFromString(sourceString)! } {{#models}}{{#model}} // Decoder for {{{classname}}} From 3a8b149f09c721649b67447894d124d211d8e1fe Mon Sep 17 00:00:00 2001 From: geekerzp Date: Wed, 20 May 2015 15:52:00 +0800 Subject: [PATCH 23/47] minor improvement to objc api client accept and content-type header --- .../src/main/resources/objc/SWGApiClient.h | 3 + .../src/main/resources/objc/SWGApiClient.m | 38 +++++ .../src/main/resources/objc/api-body.mustache | 16 ++- .../petstore/objc/client/SWGApiClient.h | 3 + .../petstore/objc/client/SWGApiClient.m | 38 +++++ .../client/petstore/objc/client/SWGPetApi.m | 136 +++++++++++------- .../client/petstore/objc/client/SWGStoreApi.m | 64 +++++---- .../client/petstore/objc/client/SWGUserApi.m | 128 ++++++++++------- 8 files changed, 300 insertions(+), 126 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h index 300cd859778..3edada7a4c7 100644 --- a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h +++ b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h @@ -48,6 +48,9 @@ extern NSString *const SWGResponseObjectErrorKey; +(void) configureCacheReachibilityForHost:(NSString*)host; ++(NSString *) selectHeaderAccept:(NSArray *)headerAcceptArray; ++(NSString *) selectHeaderContentType:(NSArray *)headerContentTypeArray; + -(void)setHeaderValue:(NSString*) value forKey:(NSString*) forKey; diff --git a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m index 6942a21c738..4547e61277a 100644 --- a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m +++ b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m @@ -79,6 +79,44 @@ static bool loggingEnabled = true; } } +/* + * Detect `Accept` from acceptArray + */ ++ (NSString *) selectHeaderAccept:(NSArray *)acceptArray +{ + // if acceptArray is nil or empty, return `application/json` + if (acceptArray == nil || [acceptArray count] == 0) { + return @"application/json"; + } + + // if `application/json` in acceptArray, return it + if ([acceptArray containsObject:[@"application/json" lowercaseString]]) { + return @"application/json"; + } + else { + return [acceptArray componentsJoinedByString:@", "]; + } +} + +/* + * Detect `Content-Type` from contentTypeArray + */ ++ (NSString *) selectHeaderContentType:(NSArray *)contentTypeArray +{ + // if contentTypeArray is nil or empty, return `application/json` + if (contentTypeArray == nil || [contentTypeArray count] == 0) { + return @"application/json"; + } + + // if `application/json` in contentTypeArray, return it + if ([contentTypeArray containsObject:[@"application/json" lowercaseString]]) { + return @"applications/json"; + } + else { + return contentTypeArray[0]; + } +} + -(void)setHeaderValue:(NSString*) value forKey:(NSString*) forKey { [self.requestSerializer setValue:value forHTTPHeaderField:forKey]; diff --git a/modules/swagger-codegen/src/main/resources/objc/api-body.mustache b/modules/swagger-codegen/src/main/resources/objc/api-body.mustache index 53e6895fe33..37699206f2b 100644 --- a/modules/swagger-codegen/src/main/resources/objc/api-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/api-body.mustache @@ -78,12 +78,6 @@ static NSString * basePath = @"{{basePath}}"; {{#pathParams}}[requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"{{baseName}}", @"}"]] withString: [SWGApiClient escape:{{paramName}}]]; {{/pathParams}} - NSArray* requestContentTypes = @[{{#consumes}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[{{#produces}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; {{#queryParams}}if({{paramName}} != nil) { {{#collectionFormat}} @@ -97,6 +91,16 @@ static NSString * basePath = @"{{basePath}}"; {{#headerParams}}if({{paramName}} != nil) headerParams[@"{{baseName}}"] = {{paramName}}; {{/headerParams}} + + // HTTP header `Accept` + NSArray *headerAccept = @[{{#produces}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[{{#consumes}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; {{#bodyParam}} diff --git a/samples/client/petstore/objc/client/SWGApiClient.h b/samples/client/petstore/objc/client/SWGApiClient.h index 300cd859778..3edada7a4c7 100644 --- a/samples/client/petstore/objc/client/SWGApiClient.h +++ b/samples/client/petstore/objc/client/SWGApiClient.h @@ -48,6 +48,9 @@ extern NSString *const SWGResponseObjectErrorKey; +(void) configureCacheReachibilityForHost:(NSString*)host; ++(NSString *) selectHeaderAccept:(NSArray *)headerAcceptArray; ++(NSString *) selectHeaderContentType:(NSArray *)headerContentTypeArray; + -(void)setHeaderValue:(NSString*) value forKey:(NSString*) forKey; diff --git a/samples/client/petstore/objc/client/SWGApiClient.m b/samples/client/petstore/objc/client/SWGApiClient.m index 6942a21c738..4547e61277a 100644 --- a/samples/client/petstore/objc/client/SWGApiClient.m +++ b/samples/client/petstore/objc/client/SWGApiClient.m @@ -79,6 +79,44 @@ static bool loggingEnabled = true; } } +/* + * Detect `Accept` from acceptArray + */ ++ (NSString *) selectHeaderAccept:(NSArray *)acceptArray +{ + // if acceptArray is nil or empty, return `application/json` + if (acceptArray == nil || [acceptArray count] == 0) { + return @"application/json"; + } + + // if `application/json` in acceptArray, return it + if ([acceptArray containsObject:[@"application/json" lowercaseString]]) { + return @"application/json"; + } + else { + return [acceptArray componentsJoinedByString:@", "]; + } +} + +/* + * Detect `Content-Type` from contentTypeArray + */ ++ (NSString *) selectHeaderContentType:(NSArray *)contentTypeArray +{ + // if contentTypeArray is nil or empty, return `application/json` + if (contentTypeArray == nil || [contentTypeArray count] == 0) { + return @"application/json"; + } + + // if `application/json` in contentTypeArray, return it + if ([contentTypeArray containsObject:[@"application/json" lowercaseString]]) { + return @"applications/json"; + } + else { + return contentTypeArray[0]; + } +} + -(void)setHeaderValue:(NSString*) value forKey:(NSString*) forKey { [self.requestSerializer setValue:value forHTTPHeaderField:forKey]; diff --git a/samples/client/petstore/objc/client/SWGPetApi.m b/samples/client/petstore/objc/client/SWGPetApi.m index 62bc34acbee..5b34337af07 100644 --- a/samples/client/petstore/objc/client/SWGPetApi.m +++ b/samples/client/petstore/objc/client/SWGPetApi.m @@ -75,17 +75,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[@"application/json", @"application/xml", ]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[@"application/json", @"application/xml", ]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -166,17 +170,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[@"application/json", @"application/xml", ]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[@"application/json", @"application/xml", ]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -257,12 +265,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(status != nil) { @@ -274,6 +276,16 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -344,12 +356,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(tags != nil) { @@ -361,6 +367,16 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -432,17 +448,29 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [SWGApiClient escape:petId]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; + + NSLog(@"--------------------------------"); + NSLog(@"request type: %@", requestContentType); + NSLog(@"response type: %@", responseContentType); + NSLog(@"headers: %@", headerParams); + NSLog(@"--------------------------------"); + + id bodyDictionary = nil; @@ -519,17 +547,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [SWGApiClient escape:petId]]; - NSArray* requestContentTypes = @[@"application/x-www-form-urlencoded", ]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[@"application/x-www-form-urlencoded", ]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -606,12 +638,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [SWGApiClient escape:petId]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; @@ -619,6 +645,16 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; if(apiKey != nil) headerParams[@"api_key"] = apiKey; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -681,17 +717,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [SWGApiClient escape:petId]]; - NSArray* requestContentTypes = @[@"multipart/form-data", ]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[@"multipart/form-data", ]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; diff --git a/samples/client/petstore/objc/client/SWGStoreApi.m b/samples/client/petstore/objc/client/SWGStoreApi.m index c50cf67c5dc..c3870cbe51f 100644 --- a/samples/client/petstore/objc/client/SWGStoreApi.m +++ b/samples/client/petstore/objc/client/SWGStoreApi.m @@ -72,17 +72,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -146,17 +150,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -252,17 +260,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"orderId", @"}"]] withString: [SWGApiClient escape:orderId]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -335,17 +347,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"orderId", @"}"]] withString: [SWGApiClient escape:orderId]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; diff --git a/samples/client/petstore/objc/client/SWGUserApi.m b/samples/client/petstore/objc/client/SWGUserApi.m index 1316cebd07c..13c37b80023 100644 --- a/samples/client/petstore/objc/client/SWGUserApi.m +++ b/samples/client/petstore/objc/client/SWGUserApi.m @@ -74,17 +74,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -165,17 +169,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -256,17 +264,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -349,12 +361,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(username != nil) { @@ -368,6 +374,16 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -435,17 +451,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -504,17 +524,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [SWGApiClient escape:username]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -589,17 +613,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [SWGApiClient escape:username]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; @@ -681,17 +709,21 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [SWGApiClient escape:username]]; - NSArray* requestContentTypes = @[]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + // HTTP header `Accept` + NSArray *headerAccept = @[@"application/json", @"application/xml"]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; + NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + + // HTTP header `Content-Type` + NSArray *headerContentType = @[]; + headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; + NSString *requestContentType = headerParams[@"Content-Type"]; id bodyDictionary = nil; From dde73d592de2f9e9d715425a41ef863f48d57957 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 20 May 2015 21:06:42 +0800 Subject: [PATCH 24/47] Return nil in Ruby clients for operations that have no response type defined --- modules/swagger-codegen/src/main/resources/ruby/api.mustache | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index ba38a8157b5..9d790ff62f3 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -51,7 +51,8 @@ module {{moduleName}} {{/bodyParam}} {{#returnType}}response = Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body - {{#returnContainer}}response.map {|response| {{/returnContainer}}obj = {{returnBaseType}}.new() and obj.build_from_hash(response){{#returnContainer}} }{{/returnContainer}}{{/returnType}}{{^returnType}} Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make{{/returnType}} + {{#returnContainer}}response.map {|response| {{/returnContainer}}obj = {{returnBaseType}}.new() and obj.build_from_hash(response){{#returnContainer}} }{{/returnContainer}}{{/returnType}}{{^returnType}} Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil{{/returnType}} end {{/operation}} end From 4702285184ba8b4898bd617bdb0aeed2adf98274 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 20 May 2015 21:08:14 +0800 Subject: [PATCH 25/47] Correct indentation --- modules/swagger-codegen/src/main/resources/ruby/api.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index 9d790ff62f3..8c805b32502 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -51,9 +51,9 @@ module {{moduleName}} {{/bodyParam}} {{#returnType}}response = Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body - {{#returnContainer}}response.map {|response| {{/returnContainer}}obj = {{returnBaseType}}.new() and obj.build_from_hash(response){{#returnContainer}} }{{/returnContainer}}{{/returnType}}{{^returnType}} Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + {{#returnContainer}}response.map {|response| {{/returnContainer}}obj = {{returnBaseType}}.new() and obj.build_from_hash(response){{#returnContainer}} }{{/returnContainer}}{{/returnType}}{{^returnType}}Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make nil{{/returnType}} - end + end {{/operation}} end {{/operations}} From 50a767ef036b1ee35f1398954506149eb5db6738 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 20 May 2015 21:13:02 +0800 Subject: [PATCH 26/47] Regenerate Ruby Petstore sample --- .../ruby/lib/swagger_client/api/pet_api.rb | 31 ++++++++++------- .../ruby/lib/swagger_client/api/store_api.rb | 11 +++--- .../ruby/lib/swagger_client/api/user_api.rb | 34 +++++++++++-------- 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb index 6f2740b22e9..ba820bc5e8e 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb @@ -37,8 +37,9 @@ module SwaggerClient post_body = Swagger::Request.object_to_http_body(opts[:'body']) - Swagger::Request.new(:PUT, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:PUT, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Add a new pet to the store # @@ -72,8 +73,9 @@ module SwaggerClient post_body = Swagger::Request.object_to_http_body(opts[:'body']) - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Finds Pets by status # Multiple status values can be provided with comma seperated strings @@ -110,7 +112,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body response.map {|response| obj = Pet.new() and obj.build_from_hash(response) } - end + end # Finds Pets by tags # Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. @@ -147,7 +149,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body response.map {|response| obj = Pet.new() and obj.build_from_hash(response) } - end + end # Find pet by ID # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions @@ -186,7 +188,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body obj = Pet.new() and obj.build_from_hash(response) - end + end # Updates a pet in the store with form data # @@ -227,8 +229,9 @@ module SwaggerClient post_body = nil - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Deletes a pet # @@ -267,8 +270,9 @@ module SwaggerClient post_body = nil - Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # uploads an image # @@ -309,7 +313,8 @@ module SwaggerClient post_body = nil - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb index 37595c2147e..d628692a5e9 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb @@ -38,7 +38,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body response.map {|response| obj = map.new() and obj.build_from_hash(response) } - end + end # Place an order for a pet # @@ -74,7 +74,7 @@ module SwaggerClient response = Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body obj = Order.new() and obj.build_from_hash(response) - end + end # Find purchase order by ID # For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions @@ -113,7 +113,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body obj = Order.new() and obj.build_from_hash(response) - end + end # Delete purchase order by ID # For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors @@ -150,7 +150,8 @@ module SwaggerClient post_body = nil - Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb index 12a45561e3f..ae7f53a5092 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb @@ -37,8 +37,9 @@ module SwaggerClient post_body = Swagger::Request.object_to_http_body(opts[:'body']) - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Creates list of users with given input array # @@ -72,8 +73,9 @@ module SwaggerClient post_body = Swagger::Request.object_to_http_body(opts[:'body']) - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Creates list of users with given input array # @@ -107,8 +109,9 @@ module SwaggerClient post_body = Swagger::Request.object_to_http_body(opts[:'body']) - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Logs user into the system # @@ -147,7 +150,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body obj = string.new() and obj.build_from_hash(response) - end + end # Logs out current logged in user session # @@ -180,8 +183,9 @@ module SwaggerClient post_body = nil - Swagger::Request.new(:GET, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:GET, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Get user by user name # @@ -220,7 +224,7 @@ module SwaggerClient response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body}).make.body obj = User.new() and obj.build_from_hash(response) - end + end # Updated user # This can only be done by the logged in user. @@ -258,8 +262,9 @@ module SwaggerClient post_body = Swagger::Request.object_to_http_body(opts[:'body']) - Swagger::Request.new(:PUT, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:PUT, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end # Delete user # This can only be done by the logged in user. @@ -296,7 +301,8 @@ module SwaggerClient post_body = nil - Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make - end + Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body}).make + nil + end end end From 8bf84aabe5b3f249390c4db03686b372dd4b4c34 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 20 May 2015 21:13:20 +0800 Subject: [PATCH 27/47] Add test case for nil return value --- samples/client/petstore/ruby/spec/pet_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/client/petstore/ruby/spec/pet_spec.rb b/samples/client/petstore/ruby/spec/pet_spec.rb index f66f33cf84c..68858c7b6cd 100644 --- a/samples/client/petstore/ruby/spec/pet_spec.rb +++ b/samples/client/petstore/ruby/spec/pet_spec.rb @@ -75,7 +75,9 @@ describe "Pet" do it "should create a pet" do pet = SwaggerClient::Pet.new('id' => 10002, 'name' => "RUBY UNIT TESTING") - SwaggerClient::PetApi.add_pet(:body => pet) + result = SwaggerClient::PetApi.add_pet(:body => pet) + # nothing is returned + result.should be_nil pet = SwaggerClient::PetApi.get_pet_by_id(10002) pet.id.should == 10002 From 9cf4c6633193d9be79d4991ab53fa0b99061d1e9 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 21 May 2015 11:30:30 +0800 Subject: [PATCH 28/47] Update method returning value comment --- .../src/main/resources/ruby/api.mustache | 2 +- .../ruby/lib/swagger_client/api/pet_api.rb | 16 ++++++++-------- .../ruby/lib/swagger_client/api/store_api.rb | 8 ++++---- .../ruby/lib/swagger_client/api/user_api.rb | 16 ++++++++-------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index 8c805b32502..e9f90087db1 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -12,7 +12,7 @@ module {{moduleName}} {{#allParams}}{{#required}} # @param {{paramName}} {{description}} {{/required}}{{/allParams}} # @param [Hash] opts the optional parameters {{#allParams}}{{^required}} # @option opts [{{dataType}}] :{{paramName}} {{description}} -{{/required}}{{/allParams}} # @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} +{{/required}}{{/allParams}} # @return [{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}nil{{/returnType}}] def self.{{nickname}}({{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}opts = {}) {{#allParams}}{{#required}} # verify the required parameter '{{paramName}}' is set diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb index ba820bc5e8e..7d2e36a0f1d 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb @@ -9,7 +9,7 @@ module SwaggerClient # # @param [Hash] opts the optional parameters # @option opts [Pet] :body Pet object that needs to be added to the store - # @return void + # @return [nil] def self.update_pet(opts = {}) @@ -45,7 +45,7 @@ module SwaggerClient # # @param [Hash] opts the optional parameters # @option opts [Pet] :body Pet object that needs to be added to the store - # @return void + # @return [nil] def self.add_pet(opts = {}) @@ -81,7 +81,7 @@ module SwaggerClient # Multiple status values can be provided with comma seperated strings # @param [Hash] opts the optional parameters # @option opts [array[string]] :status Status values that need to be considered for filter - # @return array[Pet] + # @return [array[Pet]] def self.find_pets_by_status(opts = {}) @@ -118,7 +118,7 @@ module SwaggerClient # Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. # @param [Hash] opts the optional parameters # @option opts [array[string]] :tags Tags to filter by - # @return array[Pet] + # @return [array[Pet]] def self.find_pets_by_tags(opts = {}) @@ -155,7 +155,7 @@ module SwaggerClient # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions # @param pet_id ID of pet that needs to be fetched # @param [Hash] opts the optional parameters - # @return Pet + # @return [Pet] def self.get_pet_by_id(pet_id, opts = {}) # verify the required parameter 'pet_id' is set @@ -196,7 +196,7 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @option opts [string] :name Updated name of the pet # @option opts [string] :status Updated status of the pet - # @return void + # @return [nil] def self.update_pet_with_form(pet_id, opts = {}) # verify the required parameter 'pet_id' is set @@ -238,7 +238,7 @@ module SwaggerClient # @param pet_id Pet id to delete # @param [Hash] opts the optional parameters # @option opts [string] :api_key - # @return void + # @return [nil] def self.delete_pet(pet_id, opts = {}) # verify the required parameter 'pet_id' is set @@ -280,7 +280,7 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @option opts [string] :additional_metadata Additional data to pass to server # @option opts [file] :file file to upload - # @return void + # @return [nil] def self.upload_file(pet_id, opts = {}) # verify the required parameter 'pet_id' is set diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb index d628692a5e9..594c30a0775 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb @@ -8,7 +8,7 @@ module SwaggerClient # Returns pet inventories by status # Returns a map of status codes to quantities # @param [Hash] opts the optional parameters - # @return map[string,int] + # @return [map[string,int]] def self.get_inventory(opts = {}) @@ -44,7 +44,7 @@ module SwaggerClient # # @param [Hash] opts the optional parameters # @option opts [Order] :body order placed for purchasing the pet - # @return Order + # @return [Order] def self.place_order(opts = {}) @@ -80,7 +80,7 @@ module SwaggerClient # For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions # @param order_id ID of pet that needs to be fetched # @param [Hash] opts the optional parameters - # @return Order + # @return [Order] def self.get_order_by_id(order_id, opts = {}) # verify the required parameter 'order_id' is set @@ -119,7 +119,7 @@ module SwaggerClient # For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors # @param order_id ID of the order that needs to be deleted # @param [Hash] opts the optional parameters - # @return void + # @return [nil] def self.delete_order(order_id, opts = {}) # verify the required parameter 'order_id' is set diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb index ae7f53a5092..96fe0cabada 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb @@ -9,7 +9,7 @@ module SwaggerClient # This can only be done by the logged in user. # @param [Hash] opts the optional parameters # @option opts [User] :body Created user object - # @return void + # @return [nil] def self.create_user(opts = {}) @@ -45,7 +45,7 @@ module SwaggerClient # # @param [Hash] opts the optional parameters # @option opts [array[User]] :body List of user object - # @return void + # @return [nil] def self.create_users_with_array_input(opts = {}) @@ -81,7 +81,7 @@ module SwaggerClient # # @param [Hash] opts the optional parameters # @option opts [array[User]] :body List of user object - # @return void + # @return [nil] def self.create_users_with_list_input(opts = {}) @@ -118,7 +118,7 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @option opts [string] :username The user name for login # @option opts [string] :password The password for login in clear text - # @return string + # @return [string] def self.login_user(opts = {}) @@ -155,7 +155,7 @@ module SwaggerClient # Logs out current logged in user session # # @param [Hash] opts the optional parameters - # @return void + # @return [nil] def self.logout_user(opts = {}) @@ -191,7 +191,7 @@ module SwaggerClient # # @param username The name that needs to be fetched. Use user1 for testing. # @param [Hash] opts the optional parameters - # @return User + # @return [User] def self.get_user_by_name(username, opts = {}) # verify the required parameter 'username' is set @@ -231,7 +231,7 @@ module SwaggerClient # @param username name that need to be deleted # @param [Hash] opts the optional parameters # @option opts [User] :body Updated user object - # @return void + # @return [nil] def self.update_user(username, opts = {}) # verify the required parameter 'username' is set @@ -270,7 +270,7 @@ module SwaggerClient # This can only be done by the logged in user. # @param username The name that needs to be deleted # @param [Hash] opts the optional parameters - # @return void + # @return [nil] def self.delete_user(username, opts = {}) # verify the required parameter 'username' is set From a590239df9b32d92b93d287ac613c8a0c417aae5 Mon Sep 17 00:00:00 2001 From: Alexey Nechaev Date: Thu, 21 May 2015 10:49:20 +0300 Subject: [PATCH 29/47] Fixes #771: Unit test has been fixed after merge. --- .../src/test/scala/ExampleGeneratorTest.scala | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/swagger-codegen/src/test/scala/ExampleGeneratorTest.scala b/modules/swagger-codegen/src/test/scala/ExampleGeneratorTest.scala index 5407202c5d3..09ffbf0e16c 100644 --- a/modules/swagger-codegen/src/test/scala/ExampleGeneratorTest.scala +++ b/modules/swagger-codegen/src/test/scala/ExampleGeneratorTest.scala @@ -42,17 +42,17 @@ class ExampleGeneratorTest extends FlatSpec with Matchers { item.get("contentType") match { case `xml` => { types += xml - example should be ("\\n" + - " \\n" + - " string\\n" + - " \\n" + - " \\n" + - " \\n" + - " \\n" + - " string\\n" + - " \\n" + - " \\n" + - " \\n" + + example should be ("\n" + + " \n" + + " string\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " string\n" + + " \n" + + " \n" + + " \n" + "") } case `json` => { From fa15f58506211dd35f86271e2f7ec404b6371b51 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 22 May 2015 05:15:46 +0800 Subject: [PATCH 30/47] fix warning/error in php5.3 --- .../src/main/resources/php/APIClient.mustache | 10 ++++++---- .../petstore/php/SwaggerClient-php/lib/APIClient.php | 10 ++++++---- .../php/SwaggerClient-php/tests/PetApiTest.php | 10 ++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache index b8b8eff4295..7f14468a38d 100644 --- a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache @@ -41,7 +41,7 @@ class APIClient { * @param string $host Base url of the API server (optional) */ function __construct($host = null) { - if ($host == null) { + if ($host === null) { $this->host = '{{basePath}}'; } else { $this->host = $host; @@ -107,10 +107,12 @@ class APIClient { * @return string API key with the prefix */ public function getApiKeyWithPrefix($apiKey) { - if (Configuration::$apiKeyPrefix[$apiKey]) { + if (isset(Configuration::$apiKeyPrefix[$apiKey])) { return Configuration::$apiKeyPrefix[$apiKey]." ".Configuration::$apiKey[$apiKey]; - } else { + } else if (isset(Configuration::$apiKey[$apiKey])) { return Configuration::$apiKey[$apiKey]; + } else { + return; } } @@ -368,7 +370,7 @@ class APIClient { $instance = new $class(); foreach ($instance::$swaggerTypes as $property => $type) { $original_property_name = $instance::$attributeMap[$property]; - if (isset($original_property_name)) { + if (isset($original_property_name) && isset($data->$original_property_name)) { $instance->$property = self::deserialize($data->$original_property_name, $type); } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php index 85087520c8f..e6bdbf351f8 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php @@ -41,7 +41,7 @@ class APIClient { * @param string $host Base url of the API server (optional) */ function __construct($host = null) { - if ($host == null) { + if ($host === null) { $this->host = 'http://petstore.swagger.io/v2'; } else { $this->host = $host; @@ -107,10 +107,12 @@ class APIClient { * @return string API key with the prefix */ public function getApiKeyWithPrefix($apiKey) { - if (Configuration::$apiKeyPrefix[$apiKey]) { + if (isset(Configuration::$apiKeyPrefix[$apiKey])) { return Configuration::$apiKeyPrefix[$apiKey]." ".Configuration::$apiKey[$apiKey]; - } else { + } else if (isset(Configuration::$apiKey[$apiKey])) { return Configuration::$apiKey[$apiKey]; + } else { + return; } } @@ -373,7 +375,7 @@ class APIClient { $instance = new $class(); foreach ($instance::$swaggerTypes as $property => $type) { $original_property_name = $instance::$attributeMap[$property]; - if (isset($original_property_name)) { + if (isset($original_property_name) && isset($data->$original_property_name)) { $instance->$property = self::deserialize($data->$original_property_name, $type); } } diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php index bf941756fa6..eadae07066c 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php @@ -23,7 +23,7 @@ class PetApiTest extends \PHPUnit_Framework_TestCase $category->id = $new_pet_id; // use the same id as pet $category->name = "test php category"; - $new_pet->tags = [$tag]; + $new_pet->tags = array($tag); $new_pet->category = $category; $pet_api = new SwaggerClient\PetAPI($api_client); @@ -47,12 +47,14 @@ class PetApiTest extends \PHPUnit_Framework_TestCase # test addDefaultHeader and getDefaultHeader SwaggerClient\APIClient::addDefaultHeader('test1', 'value1'); SwaggerClient\APIClient::addDefaultHeader('test2', 200); - $this->assertSame('value1', SwaggerClient\APIClient::getDefaultHeader()['test1']); - $this->assertSame(200, SwaggerClient\APIClient::getDefaultHeader()['test2']); + $defaultHeader = SwaggerClient\APIClient::getDefaultHeader(); + $this->assertSame('value1', $defaultHeader['test1']); + $this->assertSame(200, $defaultHeader['test2']); # test deleteDefaultHeader SwaggerClient\APIClient::deleteDefaultHeader('test2'); - $this->assertFalse(isset(SwaggerClient\APIClient::getDefaultHeader()['test2'])); + $defaultHeader = SwaggerClient\APIClient::getDefaultHeader(); + $this->assertFalse(isset($defaultHeader['test2'])); } From 52807c0724f9e879bed3907ca7c962899a5557b8 Mon Sep 17 00:00:00 2001 From: geekerzp Date: Fri, 22 May 2015 10:45:38 +0800 Subject: [PATCH 31/47] minor improvement to python client accept and content-type header --- .../src/main/resources/python/api.mustache | 8 ++- .../main/resources/python/swagger.mustache | 25 +++++++- .../SwaggerPetstore/apis/pet_api.py | 57 +++++++++++++------ .../SwaggerPetstore/apis/store_api.py | 26 ++++++--- .../SwaggerPetstore/apis/user_api.py | 50 ++++++++++------ .../SwaggerPetstore/swagger.py | 25 +++++++- 6 files changed, 144 insertions(+), 47 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api.mustache b/modules/swagger-codegen/src/main/resources/python/api.mustache index b853cbc9c95..eb85a10a203 100644 --- a/modules/swagger-codegen/src/main/resources/python/api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api.mustache @@ -29,6 +29,8 @@ from six import iteritems from ..util import remove_none +from ..swagger import ApiClient + {{#operations}} class {{classname}}(object): @@ -68,11 +70,13 @@ class {{classname}}(object): files = remove_none(dict({{#formParams}}{{#isFile}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/isFile}}{{/formParams}})) body_params = {{#bodyParam}}params.get('{{paramName}}'){{/bodyParam}}{{^bodyParam}}None{{/bodyParam}} + # HTTP header `Accept` accepts = [{{#produces}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [{{#consumes}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/consumes}}] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/modules/swagger-codegen/src/main/resources/python/swagger.mustache b/modules/swagger-codegen/src/main/resources/python/swagger.mustache index 549106014e3..7b284376a58 100644 --- a/modules/swagger-codegen/src/main/resources/python/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/python/swagger.mustache @@ -253,7 +253,28 @@ class ApiClient(object): return params - - + @staticmethod + def select_header_accept(accepts): + """ + Return `Accept` based on an array of accepts provided + """ + if not accepts: + return 'application/json' + if 'application/json'.lower() in accepts: + return 'application/json' + else: + return ', '.join(accepts) + + @staticmethod + def select_header_content_type(content_types): + """ + Return `Content-Type` baseed on an array of content_types provided + """ + if not content_types: + return 'application/json' + if 'application/json'.lower() in content_types: + return 'application/json' + else: + return content_types[0] diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py index bf8a51d7ca2..b06447c8c47 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py @@ -29,6 +29,8 @@ from six import iteritems from ..util import remove_none +from ..swagger import ApiClient + class PetApi(object): def __init__(self, api_client): @@ -63,11 +65,13 @@ class PetApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = ['application/json', 'application/xml'] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -102,11 +106,13 @@ class PetApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = ['application/json', 'application/xml'] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -141,11 +147,13 @@ class PetApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -182,11 +190,13 @@ class PetApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -227,11 +237,18 @@ class PetApi(object): files = remove_none(dict()) body_params = None - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + # HTTP header `Accept` + accepts = [] + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + + print('-----------------------------') + print('header_params: ', header_params) + print('-----------------------------') + return response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -274,11 +291,13 @@ class PetApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = ['application/x-www-form-urlencoded'] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -318,11 +337,13 @@ class PetApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -363,11 +384,13 @@ class PetApi(object): files = remove_none(dict(file=params.get('file'))) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = ['multipart/form-data'] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py index 0df9a84fe75..19ece346938 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py @@ -29,6 +29,8 @@ from six import iteritems from ..util import remove_none +from ..swagger import ApiClient + class StoreApi(object): def __init__(self, api_client): @@ -62,11 +64,13 @@ class StoreApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -103,11 +107,13 @@ class StoreApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -148,11 +154,13 @@ class StoreApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -193,11 +201,13 @@ class StoreApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py index 720843bd508..a705567306a 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py @@ -29,6 +29,8 @@ from six import iteritems from ..util import remove_none +from ..swagger import ApiClient + class UserApi(object): def __init__(self, api_client): @@ -63,11 +65,13 @@ class UserApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -102,11 +106,13 @@ class UserApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -141,11 +147,13 @@ class UserApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -181,11 +189,13 @@ class UserApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -221,11 +231,13 @@ class UserApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -264,11 +276,13 @@ class UserApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -310,11 +324,13 @@ class UserApi(object): files = remove_none(dict()) body_params = params.get('body') + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -353,11 +369,13 @@ class UserApi(object): files = remove_none(dict()) body_params = None + # HTTP header `Accept` accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ', '.join(accepts) + header_params['Accept'] = ApiClient.select_header_accept(accepts) + # HTTP header `Content-Type` content_types = [] - header_params['Content-Type'] = content_types[0] if len(content_types) > 0 else 'application/json' + header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py index 549106014e3..7b284376a58 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py @@ -253,7 +253,28 @@ class ApiClient(object): return params - - + @staticmethod + def select_header_accept(accepts): + """ + Return `Accept` based on an array of accepts provided + """ + if not accepts: + return 'application/json' + if 'application/json'.lower() in accepts: + return 'application/json' + else: + return ', '.join(accepts) + + @staticmethod + def select_header_content_type(content_types): + """ + Return `Content-Type` baseed on an array of content_types provided + """ + if not content_types: + return 'application/json' + if 'application/json'.lower() in content_types: + return 'application/json' + else: + return content_types[0] From 8a311d693bb8a79fc1878c7bb912b97781b4c14b Mon Sep 17 00:00:00 2001 From: geekerzp Date: Fri, 22 May 2015 10:50:11 +0800 Subject: [PATCH 32/47] updated python client samples --- .../python/SwaggerPetstore-python/.coverage | Bin 0 -> 3086 bytes .../SwaggerPetstore.egg-info/PKG-INFO | 12 +++++++++ .../SwaggerPetstore.egg-info/SOURCES.txt | 24 ++++++++++++++++++ .../dependency_links.txt | 1 + .../SwaggerPetstore.egg-info/pbr.json | 1 + .../SwaggerPetstore.egg-info/requires.txt | 2 ++ .../SwaggerPetstore.egg-info/top_level.txt | 2 ++ .../SwaggerPetstore/apis/pet_api.py | 7 +---- .../dev-requirements.txt.log | 5 ++++ 9 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/.coverage create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/PKG-INFO create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/SOURCES.txt create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/dependency_links.txt create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/pbr.json create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/requires.txt create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log diff --git a/samples/client/petstore/python/SwaggerPetstore-python/.coverage b/samples/client/petstore/python/SwaggerPetstore-python/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..6a74db3c6e5e88a712dac38a59b3bb7ffb014318 GIT binary patch literal 3086 zcmc(hX>1f_7{`4Ir7gWrdQ*w5Wkriyl;&so-sZ%yS2si^Y+thCfS+)yzlS%|K5?bA(I?> zmM7@3&~8Ma-E)X1YTk(e#K4M>MZe-7362 zq(%DNUaty|UzQ^P>ovDNyvo~u^n-Y;T;^|dg2aJ`p`5)m7N$*I@>U_r%GBcS(~v8 z$KwRF;6$8+lW_`GVii{7RII^zv|=OLunCOQQ604 z$(grc&oRtg2QrX_*~msN@{o@L6v})S+XGOED%8jTSo66UjWVN6GNsKnSj(|Ouu34c zPN3RgLj}R=bb)F!wm`?3*eZA#Hd>uf0+tV^02LLSF2SxOOnY#Jz%-80O#;#w?iPIR z#eKLR4`44I5|kcEg7lP)(lY|n0la8q^a@@TlqNtrBp`i+kMRjUvr+m|V6ss9K|uN$ zzX(XbB~kjzhUpmMbm9!+OyZnzq>62-%4B<{qmf)LU%(f2xvWjfGt7Jk2s4q6S!$X( zd~%=y!z}zSkkFHv@+wSQ%OzlV|^H?6S;*=O>=|r4%r4LL? z9C3w}rpz$sOr%LDcOmL+?KWbGJ=9Ja>*K^2En*96sMkUkF_zlYVHL6SmK$b;18JBc z#3!mL&n~4zB~{3=q008MW#vRAIi-@8+K#i5uM@wu0k+)|RdfbACe_h4+jo}jE)d@- z@m-g=t_LBznj&^N^^5BUumi)mI9XJqQc_n>vYq9++r@QbQcw@trrRfO+b>mg5O3iS z-V>i4R(d?OYdCpKD-E;is4= 1.10 +six >= 1.9 diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt new file mode 100644 index 00000000000..28c004b4315 --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt @@ -0,0 +1,2 @@ +SwaggerPetstore +tests diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py index b06447c8c47..db12623e75d 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py @@ -238,18 +238,13 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = [] + accepts = ['application/json', 'application/xml'] header_params['Accept'] = ApiClient.select_header_accept(accepts) # HTTP header `Content-Type` content_types = [] header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) - print('-----------------------------') - print('header_params: ', header_params) - print('-----------------------------') - return - 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='Pet') diff --git a/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log b/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log new file mode 100644 index 00000000000..0549f97e65f --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log @@ -0,0 +1,5 @@ +Requirement already satisfied (use --upgrade to upgrade): nose in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Cleaning up... From bc9abceef3b767249943b7df863c88fb964c27ee Mon Sep 17 00:00:00 2001 From: geekerzp Date: Fri, 22 May 2015 11:12:35 +0800 Subject: [PATCH 33/47] removed temp files from python client --- .../python/SwaggerPetstore-python/.coverage | Bin 3086 -> 0 bytes .../SwaggerPetstore.egg-info/PKG-INFO | 12 --------- .../SwaggerPetstore.egg-info/SOURCES.txt | 24 ------------------ .../dependency_links.txt | 1 - .../SwaggerPetstore.egg-info/pbr.json | 1 - .../SwaggerPetstore.egg-info/requires.txt | 2 -- .../SwaggerPetstore.egg-info/top_level.txt | 2 -- .../dev-requirements.txt.log | 5 ---- 8 files changed, 47 deletions(-) delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/.coverage delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/PKG-INFO delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/SOURCES.txt delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/dependency_links.txt delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/pbr.json delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/requires.txt delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt delete mode 100644 samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log diff --git a/samples/client/petstore/python/SwaggerPetstore-python/.coverage b/samples/client/petstore/python/SwaggerPetstore-python/.coverage deleted file mode 100644 index 6a74db3c6e5e88a712dac38a59b3bb7ffb014318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3086 zcmc(hX>1f_7{`4Ir7gWrdQ*w5Wkriyl;&so-sZ%yS2si^Y+thCfS+)yzlS%|K5?bA(I?> zmM7@3&~8Ma-E)X1YTk(e#K4M>MZe-7362 zq(%DNUaty|UzQ^P>ovDNyvo~u^n-Y;T;^|dg2aJ`p`5)m7N$*I@>U_r%GBcS(~v8 z$KwRF;6$8+lW_`GVii{7RII^zv|=OLunCOQQ604 z$(grc&oRtg2QrX_*~msN@{o@L6v})S+XGOED%8jTSo66UjWVN6GNsKnSj(|Ouu34c zPN3RgLj}R=bb)F!wm`?3*eZA#Hd>uf0+tV^02LLSF2SxOOnY#Jz%-80O#;#w?iPIR z#eKLR4`44I5|kcEg7lP)(lY|n0la8q^a@@TlqNtrBp`i+kMRjUvr+m|V6ss9K|uN$ zzX(XbB~kjzhUpmMbm9!+OyZnzq>62-%4B<{qmf)LU%(f2xvWjfGt7Jk2s4q6S!$X( zd~%=y!z}zSkkFHv@+wSQ%OzlV|^H?6S;*=O>=|r4%r4LL? z9C3w}rpz$sOr%LDcOmL+?KWbGJ=9Ja>*K^2En*96sMkUkF_zlYVHL6SmK$b;18JBc z#3!mL&n~4zB~{3=q008MW#vRAIi-@8+K#i5uM@wu0k+)|RdfbACe_h4+jo}jE)d@- z@m-g=t_LBznj&^N^^5BUumi)mI9XJqQc_n>vYq9++r@QbQcw@trrRfO+b>mg5O3iS z-V>i4R(d?OYdCpKD-E;is4= 1.10 -six >= 1.9 diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt deleted file mode 100644 index 28c004b4315..00000000000 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore.egg-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -SwaggerPetstore -tests diff --git a/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log b/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log deleted file mode 100644 index 0549f97e65f..00000000000 --- a/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt.log +++ /dev/null @@ -1,5 +0,0 @@ -Requirement already satisfied (use --upgrade to upgrade): nose in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) -Requirement already satisfied (use --upgrade to upgrade): tox in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) -Requirement already satisfied (use --upgrade to upgrade): coverage in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) -Requirement already satisfied (use --upgrade to upgrade): randomize in /Users/geekerzp/.virtualenvs/python2/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) -Cleaning up... From df4b952312d1dbe0bd8b651469dbd450ec8cbf62 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 22 May 2015 14:12:53 +0800 Subject: [PATCH 34/47] fix object type without ref for CSharp --- .../swagger/codegen/languages/CSharpClientCodegen.java | 1 + .../src/main/resources/csharp/apiInvoker.mustache | 7 +++++-- .../csharp/src/main/csharp/io/swagger/client/ApiInvoker.cs | 7 +++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/CSharpClientCodegen.java index 5060899d498..9de427058a1 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/CSharpClientCodegen.java @@ -83,6 +83,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("file", "string"); // path to file typeMapping.put("array", "List"); typeMapping.put("map", "Dictionary"); + typeMapping.put("object", "Object"); } diff --git a/modules/swagger-codegen/src/main/resources/csharp/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/csharp/apiInvoker.mustache index 9beebc19231..9760e44d81a 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/apiInvoker.mustache @@ -53,10 +53,13 @@ namespace {{invokerPackage}} { /// JSON string /// Object type /// Object representation of the JSON string - public static object Deserialize(string json, Type type) { + public static object Deserialize(string content, Type type) { + if (type.GetType() == typeof(Object)) + return (Object)content; + try { - return JsonConvert.DeserializeObject(json, type); + return JsonConvert.DeserializeObject(content, type); } catch (IOException e) { throw new ApiException(500, e.Message); diff --git a/samples/client/petstore/csharp/src/main/csharp/io/swagger/client/ApiInvoker.cs b/samples/client/petstore/csharp/src/main/csharp/io/swagger/client/ApiInvoker.cs index 144027b2314..8bb36472835 100644 --- a/samples/client/petstore/csharp/src/main/csharp/io/swagger/client/ApiInvoker.cs +++ b/samples/client/petstore/csharp/src/main/csharp/io/swagger/client/ApiInvoker.cs @@ -53,10 +53,13 @@ namespace IO.Swagger.Client { /// JSON string /// Object type /// Object representation of the JSON string - public static object Deserialize(string json, Type type) { + public static object Deserialize(string content, Type type) { + if (type.GetType() == typeof(Object)) + return (Object)content; + try { - return JsonConvert.DeserializeObject(json, type); + return JsonConvert.DeserializeObject(content, type); } catch (IOException e) { throw new ApiException(500, e.Message); From 245ce642cec8d494254fa60f97a6d7bd5bf5cfa0 Mon Sep 17 00:00:00 2001 From: geekerzp Date: Fri, 22 May 2015 15:28:36 +0800 Subject: [PATCH 35/47] add test cases for ApiClient.select_header_accept and ApiClient.select_header_content_type of python client. --- .../src/main/resources/python/api.mustache | 8 +-- .../main/resources/python/swagger.mustache | 2 +- .../SwaggerPetstore/apis/pet_api.py | 64 +++++++++---------- .../SwaggerPetstore/apis/store_api.py | 32 +++++----- .../SwaggerPetstore/apis/user_api.py | 64 +++++++++---------- .../SwaggerPetstore/swagger.py | 2 +- .../tests/test_api_client.py | 58 +++++++++++++++++ 7 files changed, 144 insertions(+), 86 deletions(-) create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py diff --git a/modules/swagger-codegen/src/main/resources/python/api.mustache b/modules/swagger-codegen/src/main/resources/python/api.mustache index eb85a10a203..fc779a66653 100644 --- a/modules/swagger-codegen/src/main/resources/python/api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api.mustache @@ -71,12 +71,12 @@ class {{classname}}(object): body_params = {{#bodyParam}}params.get('{{paramName}}'){{/bodyParam}}{{^bodyParam}}None{{/bodyParam}} # HTTP header `Accept` - accepts = [{{#produces}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept([{{#produces}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}]) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [{{#consumes}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/consumes}}] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([{{#consumes}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/consumes}}]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/modules/swagger-codegen/src/main/resources/python/swagger.mustache b/modules/swagger-codegen/src/main/resources/python/swagger.mustache index 7b284376a58..569f0cd9e8d 100644 --- a/modules/swagger-codegen/src/main/resources/python/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/python/swagger.mustache @@ -259,7 +259,7 @@ class ApiClient(object): Return `Accept` based on an array of accepts provided """ if not accepts: - return 'application/json' + return if 'application/json'.lower() in accepts: return 'application/json' else: diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py index db12623e75d..a599aeaabc1 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py @@ -66,12 +66,12 @@ class PetApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = ['application/json', 'application/xml'] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type(['application/json', 'application/xml']) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -107,12 +107,12 @@ class PetApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = ['application/json', 'application/xml'] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type(['application/json', 'application/xml']) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -148,12 +148,12 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -191,12 +191,12 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -238,12 +238,12 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -287,12 +287,12 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = ['application/x-www-form-urlencoded'] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type(['application/x-www-form-urlencoded']) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -333,12 +333,12 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -380,12 +380,12 @@ class PetApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = ['multipart/form-data'] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type(['multipart/form-data']) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py index 19ece346938..7f9b852f7ca 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py @@ -65,12 +65,12 @@ class StoreApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -108,12 +108,12 @@ class StoreApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -155,12 +155,12 @@ class StoreApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -202,12 +202,12 @@ class StoreApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py index a705567306a..2471970c436 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py @@ -66,12 +66,12 @@ class UserApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -107,12 +107,12 @@ class UserApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -148,12 +148,12 @@ class UserApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -190,12 +190,12 @@ class UserApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -232,12 +232,12 @@ class UserApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -277,12 +277,12 @@ class UserApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -325,12 +325,12 @@ class UserApi(object): body_params = params.get('body') # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, @@ -370,12 +370,12 @@ class UserApi(object): body_params = None # HTTP header `Accept` - accepts = ['application/json', 'application/xml'] - header_params['Accept'] = ApiClient.select_header_accept(accepts) + header_params['Accept'] = ApiClient.select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] # HTTP header `Content-Type` - content_types = [] - header_params['Content-Type'] = ApiClient.select_header_content_type(content_types) + header_params['Content-Type'] = ApiClient.select_header_content_type([]) response = self.api_client.call_api(resource_path, method, path_params, query_params, header_params, body=body_params, post_params=form_params, files=files, diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py index 7b284376a58..569f0cd9e8d 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py @@ -259,7 +259,7 @@ class ApiClient(object): Return `Accept` based on an array of accepts provided """ if not accepts: - return 'application/json' + return if 'application/json'.lower() in accepts: return 'application/json' else: diff --git a/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py b/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py new file mode 100644 index 00000000000..437e94d09c6 --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" +Run the tests. +$ pip install nose (optional) +$ cd SwaggerPetstore-python +$ nosetests -v +""" + +import os +import time +import unittest + +import SwaggerPetstore + +HOST = 'http://petstore.swagger.io/v2' + + +class ApiClientTests(unittest.TestCase): + + def setUp(self): + self.api_client = SwaggerPetstore.ApiClient(HOST) + + def test_select_header_accept(self): + accepts = ['application/json', 'application/xml'] + accept = SwaggerPetstore.ApiClient.select_header_accept(accepts) + self.assertEqual(accept, 'application/json') + + accepts = ['application/xml', 'application/json'] + accept = SwaggerPetstore.ApiClient.select_header_accept(accepts) + self.assertEqual(accept, 'application/json') + + accepts = ['text/plain', 'application/xml'] + accept = SwaggerPetstore.ApiClient.select_header_accept(accepts) + self.assertEqual(accept, 'text/plain, application/xml') + + accepts = [] + accept = SwaggerPetstore.ApiClient.select_header_accept(accepts) + self.assertEqual(accept, None) + + def test_select_header_content_type(self): + content_types = ['application/json', 'application/xml'] + content_type = SwaggerPetstore.ApiClient.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + content_types = ['application/xml', 'application/json'] + content_type = SwaggerPetstore.ApiClient.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + content_types = ['text/plain', 'application/xml'] + content_type = SwaggerPetstore.ApiClient.select_header_content_type(content_types) + self.assertEqual(content_type, 'text/plain') + + content_types = [] + content_type = SwaggerPetstore.ApiClient.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + From 8d0efd812cbfe088c2a8c47bc7c93263d8ac6aa6 Mon Sep 17 00:00:00 2001 From: geekerzp Date: Fri, 22 May 2015 15:50:09 +0800 Subject: [PATCH 36/47] updated unittests of python client --- .../src/main/resources/python/swagger.mustache | 16 ++++++++++------ .../SwaggerPetstore/swagger.py | 16 ++++++++++------ .../tests/test_api_client.py | 8 ++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/swagger.mustache b/modules/swagger-codegen/src/main/resources/python/swagger.mustache index 569f0cd9e8d..ab45eace646 100644 --- a/modules/swagger-codegen/src/main/resources/python/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/python/swagger.mustache @@ -105,7 +105,7 @@ class ApiClient(object): def to_path_value(self, obj): """ Convert a string or object to a path-friendly value - + :param obj: object or string value :return string: quoted value @@ -259,8 +259,11 @@ class ApiClient(object): Return `Accept` based on an array of accepts provided """ if not accepts: - return - if 'application/json'.lower() in accepts: + return + + accepts = list(map(lambda x: x.lower(), accepts)) + + if 'application/json' in accepts: return 'application/json' else: return ', '.join(accepts) @@ -272,9 +275,10 @@ class ApiClient(object): """ if not content_types: return 'application/json' - if 'application/json'.lower() in content_types: + + content_types = list(map(lambda x: x.lower(), content_types)) + + if 'application/json' in content_types: return 'application/json' else: return content_types[0] - - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py index 569f0cd9e8d..ab45eace646 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/swagger.py @@ -105,7 +105,7 @@ class ApiClient(object): def to_path_value(self, obj): """ Convert a string or object to a path-friendly value - + :param obj: object or string value :return string: quoted value @@ -259,8 +259,11 @@ class ApiClient(object): Return `Accept` based on an array of accepts provided """ if not accepts: - return - if 'application/json'.lower() in accepts: + return + + accepts = list(map(lambda x: x.lower(), accepts)) + + if 'application/json' in accepts: return 'application/json' else: return ', '.join(accepts) @@ -272,9 +275,10 @@ class ApiClient(object): """ if not content_types: return 'application/json' - if 'application/json'.lower() in content_types: + + content_types = list(map(lambda x: x.lower(), content_types)) + + if 'application/json' in content_types: return 'application/json' else: return content_types[0] - - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py b/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py index 437e94d09c6..9adf7cdb99d 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/tests/test_api_client.py @@ -22,6 +22,10 @@ class ApiClientTests(unittest.TestCase): self.api_client = SwaggerPetstore.ApiClient(HOST) def test_select_header_accept(self): + accepts = ['APPLICATION/JSON', 'APPLICATION/XML'] + accept = SwaggerPetstore.ApiClient.select_header_accept(accepts) + self.assertEqual(accept, 'application/json') + accepts = ['application/json', 'application/xml'] accept = SwaggerPetstore.ApiClient.select_header_accept(accepts) self.assertEqual(accept, 'application/json') @@ -39,6 +43,10 @@ class ApiClientTests(unittest.TestCase): self.assertEqual(accept, None) def test_select_header_content_type(self): + content_types = ['APPLICATION/JSON', 'APPLICATION/XML'] + content_type = SwaggerPetstore.ApiClient.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + content_types = ['application/json', 'application/xml'] content_type = SwaggerPetstore.ApiClient.select_header_content_type(content_types) self.assertEqual(content_type, 'application/json') From 612abf134b76e5941461dc093806b4d3cc6bddb4 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 22 May 2015 22:09:51 +0800 Subject: [PATCH 37/47] api client as instance (not static class) --- .../src/main/resources/php/api.mustache | 13 ++++++-- .../main/resources/php/configuration.mustache | 10 +++++++ .../SwaggerClient-php/lib/Configuration.php | 10 +++++++ .../php/SwaggerClient-php/lib/PetApi.php | 30 +++++++++++++++++-- .../php/SwaggerClient-php/lib/StoreApi.php | 13 ++++++-- .../php/SwaggerClient-php/lib/UserApi.php | 13 ++++++-- samples/client/petstore/php/test.php | 7 +++-- 7 files changed, 85 insertions(+), 11 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index 98be8ff3a5c..25185e07734 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -25,8 +25,17 @@ namespace {{invokerPackage}}; {{#operations}} class {{classname}} { - function __construct($apiClient) { - $this->apiClient = $apiClient; + function __construct($apiClient = null) { + if (null === $apiClient) { + if (Configuration::$apiClient === null) { + Configuration::$apiClient = new APIClient(); // create a new API client if not present + $this->apiClient = Configuration::$apiClient; + } + else + $this->apiClient = Configuration::$apiClient; // use the default one + } else { + $this->apiClient = $apiClient; // use the one provided by the user + } } {{#operation}} diff --git a/modules/swagger-codegen/src/main/resources/php/configuration.mustache b/modules/swagger-codegen/src/main/resources/php/configuration.mustache index 9af553702ae..3eaa8dba1f1 100644 --- a/modules/swagger-codegen/src/main/resources/php/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/php/configuration.mustache @@ -31,6 +31,16 @@ class Configuration { public static $username = ''; public static $password = ''; + // an instance of APIClient + public static $apiClient; + + /* + * manually initalize API client + */ + public static function init() { + if (self::$apiClient === null) + self::$apiClient = new APIClient(); + } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php b/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php index 9426efa9170..1f91f8d9063 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php @@ -31,6 +31,16 @@ class Configuration { public static $username = ''; public static $password = ''; + // an instance of APIClient + public static $apiClient; + + /* + * manually initalize API client + */ + public static function init() { + if (self::$apiClient === null) + self::$apiClient = new APIClient(); + } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php index eece13acff7..77a9eaf0d42 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php @@ -24,11 +24,37 @@ namespace SwaggerClient; class PetApi { - function __construct($apiClient) { - $this->apiClient = $apiClient; + + function __construct($apiClient = null) { + if (null === $apiClient) { + if (Configuration::$apiClient === null) { + Configuration::$apiClient = new APIClient(); // create a new API client if not present + $this->apiClient = Configuration::$apiClient; + } + else + $this->apiClient = Configuration::$apiClient; // use the default one + } else { + $this->apiClient = $apiClient; // use the one provided by the user + } } + private $apiClient; + + /** + * get the API client + */ + public function getApiClient() { + return $this->apiClient; + } + + /** + * set the API client + */ + public function getApiClient($apiClient) { + $this->apiClient = $apiClient; + } + /** * updatePet * diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php index 609e6568ed4..1c20a8994cf 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php @@ -24,8 +24,17 @@ namespace SwaggerClient; class StoreApi { - function __construct($apiClient) { - $this->apiClient = $apiClient; + function __construct($apiClient = null) { + if (null === $apiClient) { + if (Configuration::$apiClient === null) { + Configuration::$apiClient = new APIClient(); // create a new API client if not present + $this->apiClient = Configuration::$apiClient; + } + else + $this->apiClient = Configuration::$apiClient; // use the default one + } else { + $this->apiClient = $apiClient; // use the one provided by the user + } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php index 985ed22a40c..69822f39f1d 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php @@ -24,8 +24,17 @@ namespace SwaggerClient; class UserApi { - function __construct($apiClient) { - $this->apiClient = $apiClient; + function __construct($apiClient = null) { + if (null === $apiClient) { + if (Configuration::$apiClient === null) { + Configuration::$apiClient = new APIClient(); // create a new API client if not present + $this->apiClient = Configuration::$apiClient; + } + else + $this->apiClient = Configuration::$apiClient; // use the default one + } else { + $this->apiClient = $apiClient; // use the one provided by the user + } } diff --git a/samples/client/petstore/php/test.php b/samples/client/petstore/php/test.php index 7d46d8b5821..41c206ee6b0 100644 --- a/samples/client/petstore/php/test.php +++ b/samples/client/petstore/php/test.php @@ -3,12 +3,13 @@ require_once('SwaggerClient-php/SwaggerClient.php'); // initialize the API client -$api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); -$api_client->addDefaultHeader("test1", "value1"); +//$api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); +//$api_client->addDefaultHeader("test1", "value1"); $petId = 10005; // ID of pet that needs to be fetched try { - $pet_api = new SwaggerClient\PetAPI($api_client); + //$pet_api = new SwaggerClient\PetAPI($api_client); + $pet_api = new SwaggerClient\PetAPI(); // return Pet (model) $response = $pet_api->getPetById($petId); var_dump($response); From 691838c47d414bb3662bdd1080a41281844ec885 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 23 May 2015 10:35:19 +0800 Subject: [PATCH 38/47] add test case for api client instance --- .../src/main/resources/php/APIClient.mustache | 27 ++++++++++++-- .../src/main/resources/php/api.mustache | 16 ++++++++ .../php/SwaggerClient-php/lib/APIClient.php | 27 ++++++++++++-- .../php/SwaggerClient-php/lib/PetApi.php | 7 ++-- .../php/SwaggerClient-php/lib/StoreApi.php | 16 ++++++++ .../php/SwaggerClient-php/lib/UserApi.php | 16 ++++++++ .../SwaggerClient-php/tests/PetApiTest.php | 37 +++++++++++++++---- 7 files changed, 129 insertions(+), 17 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache index b8b8eff4295..7d9f35446ff 100644 --- a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache @@ -92,15 +92,36 @@ class APIClient { } /** - * @param integer $seconds Number of seconds before timing out [set to 0 for no timeout] + * get the user agent of the api client + * + * @return string user agent + */ + public function getUserAgent($user_agent) { + return $this->user_agent; + } + + /** + * set the HTTP timeout value + * + * @param integer $seconds Number of seconds before timing out [set to 0 for no timeout] */ public function setTimeout($seconds) { - if (!is_numeric($seconds)) - throw new \InvalidArgumentException('Timeout variable must be numeric.'); + if (!is_numeric($seconds) || $seconds < 0) + throw new \InvalidArgumentException('Timeout value must be numeric and a non-negative number.'); $this->curl_timeout = $seconds; } + /** + * get the HTTP timeout value + * + * @return string HTTP timeout value + */ + public function getTimeout() { + return $this->curl_timeout; + } + + /** * Get API key (with prefix if set) * @param string key name diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index 25185e07734..1c32eeb01c5 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -38,6 +38,22 @@ class {{classname}} { } } + private $apiClient; // instance of the APIClient + + /** + * get the API client + */ + public function getApiClient() { + return $this->apiClient; + } + + /** + * set the API client + */ + public function setApiClient($apiClient) { + $this->apiClient = $apiClient; + } + {{#operation}} /** * {{{nickname}}} diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php index 85087520c8f..efc420b11a6 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php @@ -92,15 +92,36 @@ class APIClient { } /** - * @param integer $seconds Number of seconds before timing out [set to 0 for no timeout] + * get the user agent of the api client + * + * @return string user agent + */ + public function getUserAgent($user_agent) { + return $this->user_agent; + } + + /** + * set the HTTP timeout value + * + * @param integer $seconds Number of seconds before timing out [set to 0 for no timeout] */ public function setTimeout($seconds) { - if (!is_numeric($seconds)) - throw new \InvalidArgumentException('Timeout variable must be numeric.'); + if (!is_numeric($seconds) || $seconds < 0) + throw new \InvalidArgumentException('Timeout value must be numeric and a non-negative number.'); $this->curl_timeout = $seconds; } + /** + * get the HTTP timeout value + * + * @return string HTTP timeout value + */ + public function getTimeout() { + return $this->curl_timeout; + } + + /** * Get API key (with prefix if set) * @param string key name diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php index 77a9eaf0d42..9456f42bc15 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php @@ -24,7 +24,6 @@ namespace SwaggerClient; class PetApi { - function __construct($apiClient = null) { if (null === $apiClient) { if (Configuration::$apiClient === null) { @@ -38,8 +37,7 @@ class PetApi { } } - - private $apiClient; + private $apiClient; // instance of the APIClient /** * get the API client @@ -51,10 +49,11 @@ class PetApi { /** * set the API client */ - public function getApiClient($apiClient) { + public function setApiClient($apiClient) { $this->apiClient = $apiClient; } + /** * updatePet * diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php index 1c20a8994cf..629201965dc 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php @@ -37,6 +37,22 @@ class StoreApi { } } + private $apiClient; // instance of the APIClient + + /** + * get the API client + */ + public function getApiClient() { + return $this->apiClient; + } + + /** + * set the API client + */ + public function setApiClient($apiClient) { + $this->apiClient = $apiClient; + } + /** * getInventory diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php index 69822f39f1d..0f4a1bf2dac 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php @@ -37,6 +37,22 @@ class UserApi { } } + private $apiClient; // instance of the APIClient + + /** + * get the API client + */ + public function getApiClient() { + return $this->apiClient; + } + + /** + * set the API client + */ + public function setApiClient($apiClient) { + $this->apiClient = $apiClient; + } + /** * createUser diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php index bf941756fa6..1f8dad4cc4c 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php @@ -7,8 +7,8 @@ class PetApiTest extends \PHPUnit_Framework_TestCase // add a new pet (id 10005) to ensure the pet object is available for all the tests public static function setUpBeforeClass() { - // initialize the API client - $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); + // skip initializing the API client as it should be automatic + //$api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); // new pet $new_pet_id = 10005; $new_pet = new SwaggerClient\models\Pet; @@ -26,7 +26,7 @@ class PetApiTest extends \PHPUnit_Framework_TestCase $new_pet->tags = [$tag]; $new_pet->category = $category; - $pet_api = new SwaggerClient\PetAPI($api_client); + $pet_api = new SwaggerClient\PetAPI(); // add a new pet (model) $add_response = $pet_api->addPet($new_pet); } @@ -34,26 +34,49 @@ class PetApiTest extends \PHPUnit_Framework_TestCase // test static functions defined in APIClient public function testAPIClient() { - # test selectHeaderAccept + // test selectHeaderAccept $this->assertSame('application/json', SwaggerClient\APIClient::selectHeaderAccept(array('application/xml','application/json'))); $this->assertSame(NULL, SwaggerClient\APIClient::selectHeaderAccept(array())); $this->assertSame('application/yaml,application/xml', SwaggerClient\APIClient::selectHeaderAccept(array('application/yaml','application/xml'))); - # test selectHeaderContentType + // test selectHeaderContentType $this->assertSame('application/json', SwaggerClient\APIClient::selectHeaderContentType(array('application/xml','application/json'))); $this->assertSame('application/json', SwaggerClient\APIClient::selectHeaderContentType(array())); $this->assertSame('application/yaml,application/xml', SwaggerClient\APIClient::selectHeaderContentType(array('application/yaml','application/xml'))); - # test addDefaultHeader and getDefaultHeader + // test addDefaultHeader and getDefaultHeader SwaggerClient\APIClient::addDefaultHeader('test1', 'value1'); SwaggerClient\APIClient::addDefaultHeader('test2', 200); $this->assertSame('value1', SwaggerClient\APIClient::getDefaultHeader()['test1']); $this->assertSame(200, SwaggerClient\APIClient::getDefaultHeader()['test2']); - # test deleteDefaultHeader + // test deleteDefaultHeader SwaggerClient\APIClient::deleteDefaultHeader('test2'); $this->assertFalse(isset(SwaggerClient\APIClient::getDefaultHeader()['test2'])); + $pet_api = new SwaggerClient\PetAPI(); + $pet_api2 = new SwaggerClient\PetAPI(); + $apiClient3 = new SwaggerClient\APIClient(); + $apiClient3->setUserAgent = 'api client 3'; + $apiClient4 = new SwaggerClient\APIClient(); + $apiClient4->setUserAgent = 'api client 4'; + $pet_api3 = new SwaggerClient\PetAPI($apiClient3); + + // same default api client + $this->assertSame($pet_api->getApiClient(), $pet_api2->getApiClient()); + // confirm using the default api client in the Configuration + $this->assertSame($pet_api->getApiClient(), SwaggerClient\Configuration::$apiClient); + // 2 different api clients are not the same + $this->assertNotEquals($apiClient3, $apiClient4); + // customized pet api not using the default (configuration) api client + $this->assertNotEquals($pet_api3->getApiClient(), SwaggerClient\Configuration::$apiClient); + // customied pet api not using the old pet api's api client + $this->assertNotEquals($pet_api2->getApiClient(), $pet_api3->getApiClient()); + + // both pet api and pet api2 share the same api client and confirm using timeout value + $pet_api->getApiClient()->setTimeout(999); + $this->assertSame(999, $pet_api2->getApiClient()->getTimeout()); + } // test getPetById with a Pet object (id 10005) From 3d3cbe115ef0418c3f9ff5cd22b44bcf02630969 Mon Sep 17 00:00:00 2001 From: geekerzp Date: Sat, 23 May 2015 15:22:12 +0800 Subject: [PATCH 39/47] minor improvement to objc client accept and content-type header --- .../src/main/resources/objc/SWGApiClient.m | 49 ++-- .../src/main/resources/objc/api-body.mustache | 22 +- .../PetstoreClient.xcodeproj/project.pbxproj | 4 + .../PetstoreClientTests/SWGApiClientTest.m | 59 +++++ samples/client/petstore/objc/Podfile.lock | 30 +-- .../petstore/objc/client/SWGApiClient.m | 49 ++-- .../client/petstore/objc/client/SWGPetApi.m | 209 ++++++++++-------- .../client/petstore/objc/client/SWGStoreApi.m | 88 +++++--- .../client/petstore/objc/client/SWGUserApi.m | 176 ++++++++++----- 9 files changed, 448 insertions(+), 238 deletions(-) create mode 100644 samples/client/petstore/objc/PetstoreClient/PetstoreClientTests/SWGApiClientTest.m diff --git a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m index 4547e61277a..15dbee07459 100644 --- a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m +++ b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.m @@ -80,41 +80,48 @@ static bool loggingEnabled = true; } /* - * Detect `Accept` from acceptArray + * Detect `Accept` from accepts */ -+ (NSString *) selectHeaderAccept:(NSArray *)acceptArray ++ (NSString *) selectHeaderAccept:(NSArray *)accepts { - // if acceptArray is nil or empty, return `application/json` - if (acceptArray == nil || [acceptArray count] == 0) { - return @"application/json"; + if (accepts == nil || [accepts count] == 0) { + return @""; } + + NSMutableArray *lowerAccepts = [[NSMutableArray alloc] initWithCapacity:[accepts count]]; + [accepts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [lowerAccepts addObject:[obj lowercaseString]]; + }]; - // if `application/json` in acceptArray, return it - if ([acceptArray containsObject:[@"application/json" lowercaseString]]) { + + if ([lowerAccepts containsObject:@"application/json"]) { return @"application/json"; } else { - return [acceptArray componentsJoinedByString:@", "]; + return [lowerAccepts componentsJoinedByString:@", "]; } } /* - * Detect `Content-Type` from contentTypeArray + * Detect `Content-Type` from contentTypes */ -+ (NSString *) selectHeaderContentType:(NSArray *)contentTypeArray ++ (NSString *) selectHeaderContentType:(NSArray *)contentTypes { - // if contentTypeArray is nil or empty, return `application/json` - if (contentTypeArray == nil || [contentTypeArray count] == 0) { - return @"application/json"; - } + if (contentTypes == nil || [contentTypes count] == 0) { + return @"application/json"; + } + + NSMutableArray *lowerContentTypes = [[NSMutableArray alloc] initWithCapacity:[contentTypes count]]; + [contentTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [lowerContentTypes addObject:[obj lowercaseString]]; + }]; - // if `application/json` in contentTypeArray, return it - if ([contentTypeArray containsObject:[@"application/json" lowercaseString]]) { - return @"applications/json"; - } - else { - return contentTypeArray[0]; - } + if ([lowerContentTypes containsObject:@"application/json"]) { + return @"application/json"; + } + else { + return lowerContentTypes[0]; + } } -(void)setHeaderValue:(NSString*) value diff --git a/modules/swagger-codegen/src/main/resources/objc/api-body.mustache b/modules/swagger-codegen/src/main/resources/objc/api-body.mustache index 34e20e36f9a..b18790e3b6f 100644 --- a/modules/swagger-codegen/src/main/resources/objc/api-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/api-body.mustache @@ -98,14 +98,22 @@ static NSString * basePath = @"{{basePath}}"; {{/headerParams}} // HTTP header `Accept` - NSArray *headerAccept = @[{{#produces}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[{{#produces}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[{{#consumes}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[{{#consumes}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}]]; id bodyDictionary = nil; {{#bodyParam}} diff --git a/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj index a3f7b4cae6b..723caec2cdb 100644 --- a/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ BA525648922D4C0E9F44D4F1 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DA4F1067C343C3962F1542 /* libPods.a */; }; + CF31D0991B105E4B00509935 /* SWGApiClientTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CF31D0981B105E4B00509935 /* SWGApiClientTest.m */; }; CFD1B6701B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.m in Sources */ = {isa = PBXBuildFile; fileRef = CFD1B66F1B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.m */; }; CFD1B6711B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.m in Sources */ = {isa = PBXBuildFile; fileRef = CFD1B66F1B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.m */; }; EA66999A1811D2FA00A70D03 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA6699991811D2FA00A70D03 /* Foundation.framework */; }; @@ -55,6 +56,7 @@ /* Begin PBXFileReference section */ 73DA4F1067C343C3962F1542 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; A425648B5C0A4849C7668069 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "../Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + CF31D0981B105E4B00509935 /* SWGApiClientTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SWGApiClientTest.m; sourceTree = ""; }; CFD1B66E1B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "JSONValueTransformer+ISO8601.h"; sourceTree = ""; }; CFD1B66F1B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "JSONValueTransformer+ISO8601.m"; sourceTree = ""; }; E2B6DA00BE52336E23783686 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "../Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; @@ -207,6 +209,7 @@ isa = PBXGroup; children = ( EA8CD3EB1AC274BE00C47D0B /* PetApiTest.h */, + CF31D0981B105E4B00509935 /* SWGApiClientTest.m */, EA6699C71811D2FB00A70D03 /* PetApiTest.m */, EA6699C21811D2FB00A70D03 /* Supporting Files */, ); @@ -417,6 +420,7 @@ EAB26B0C1AC8DF78002F5C7A /* PetApiTest.h in Sources */, CFD1B6711B05EC7D00DCCD51 /* JSONValueTransformer+ISO8601.m in Sources */, EAB26B0D1AC8DF78002F5C7A /* PetApiTest.m in Sources */, + CF31D0991B105E4B00509935 /* SWGApiClientTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/samples/client/petstore/objc/PetstoreClient/PetstoreClientTests/SWGApiClientTest.m b/samples/client/petstore/objc/PetstoreClient/PetstoreClientTests/SWGApiClientTest.m new file mode 100644 index 00000000000..0464bf569e9 --- /dev/null +++ b/samples/client/petstore/objc/PetstoreClient/PetstoreClientTests/SWGApiClientTest.m @@ -0,0 +1,59 @@ +#import +#import +#import "SWGApiClient.h" + +@interface SWGApiClientTest : XCTestCase + +@end + +@implementation SWGApiClientTest + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testSelectHeaderAccept { + NSArray *accepts = nil; + + accepts = @[@"APPLICATION/JSON", @"APPLICATION/XML"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"application/json"); + + accepts = @[@"application/json", @"application/xml"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"application/json"); + + accepts = @[@"APPLICATION/xml", @"APPLICATION/json"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"application/json"); + + accepts = @[@"text/plain", @"application/xml"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"text/plain, application/xml"); + + accepts = @[]; + XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @""); +} + +- (void)testSelectHeaderContentType { + NSArray *contentTypes = nil; + + contentTypes = @[@"APPLICATION/JSON", @"APPLICATION/XML"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); + + contentTypes = @[@"application/json", @"application/xml"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); + + contentTypes = @[@"APPLICATION/xml", @"APPLICATION/json"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); + + contentTypes = @[@"text/plain", @"application/xml"]; + XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"text/plain"); + + contentTypes = @[]; + XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); +} + +@end diff --git a/samples/client/petstore/objc/Podfile.lock b/samples/client/petstore/objc/Podfile.lock index fe43a2c80eb..6ac776ab37a 100644 --- a/samples/client/petstore/objc/Podfile.lock +++ b/samples/client/petstore/objc/Podfile.lock @@ -1,23 +1,23 @@ PODS: - - AFNetworking (2.5.3): - - AFNetworking/NSURLConnection (= 2.5.3) - - AFNetworking/NSURLSession (= 2.5.3) - - AFNetworking/Reachability (= 2.5.3) - - AFNetworking/Security (= 2.5.3) - - AFNetworking/Serialization (= 2.5.3) - - AFNetworking/UIKit (= 2.5.3) - - AFNetworking/NSURLConnection (2.5.3): + - AFNetworking (2.5.4): + - AFNetworking/NSURLConnection (= 2.5.4) + - AFNetworking/NSURLSession (= 2.5.4) + - AFNetworking/Reachability (= 2.5.4) + - AFNetworking/Security (= 2.5.4) + - AFNetworking/Serialization (= 2.5.4) + - AFNetworking/UIKit (= 2.5.4) + - AFNetworking/NSURLConnection (2.5.4): - AFNetworking/Reachability - AFNetworking/Security - AFNetworking/Serialization - - AFNetworking/NSURLSession (2.5.3): + - AFNetworking/NSURLSession (2.5.4): - AFNetworking/Reachability - AFNetworking/Security - AFNetworking/Serialization - - AFNetworking/Reachability (2.5.3) - - AFNetworking/Security (2.5.3) - - AFNetworking/Serialization (2.5.3) - - AFNetworking/UIKit (2.5.3): + - AFNetworking/Reachability (2.5.4) + - AFNetworking/Security (2.5.4) + - AFNetworking/Serialization (2.5.4) + - AFNetworking/UIKit (2.5.4): - AFNetworking/NSURLConnection - AFNetworking/NSURLSession - ISO8601 (0.2.0) @@ -29,8 +29,8 @@ DEPENDENCIES: - JSONModel (~> 1.0) SPEC CHECKSUMS: - AFNetworking: e1d86c2a96bb5d2e7408da36149806706ee122fe + AFNetworking: 05edc0ac4c4c8cf57bcf4b84be5b0744b6d8e71e ISO8601: 962282de75074c38bbfaa7b133b0e743ed6deb8d JSONModel: ec77e9865236a7a09d9cf7668df6b4b328d9ec1d -COCOAPODS: 0.36.0 +COCOAPODS: 0.37.1 diff --git a/samples/client/petstore/objc/client/SWGApiClient.m b/samples/client/petstore/objc/client/SWGApiClient.m index 4547e61277a..15dbee07459 100644 --- a/samples/client/petstore/objc/client/SWGApiClient.m +++ b/samples/client/petstore/objc/client/SWGApiClient.m @@ -80,41 +80,48 @@ static bool loggingEnabled = true; } /* - * Detect `Accept` from acceptArray + * Detect `Accept` from accepts */ -+ (NSString *) selectHeaderAccept:(NSArray *)acceptArray ++ (NSString *) selectHeaderAccept:(NSArray *)accepts { - // if acceptArray is nil or empty, return `application/json` - if (acceptArray == nil || [acceptArray count] == 0) { - return @"application/json"; + if (accepts == nil || [accepts count] == 0) { + return @""; } + + NSMutableArray *lowerAccepts = [[NSMutableArray alloc] initWithCapacity:[accepts count]]; + [accepts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [lowerAccepts addObject:[obj lowercaseString]]; + }]; - // if `application/json` in acceptArray, return it - if ([acceptArray containsObject:[@"application/json" lowercaseString]]) { + + if ([lowerAccepts containsObject:@"application/json"]) { return @"application/json"; } else { - return [acceptArray componentsJoinedByString:@", "]; + return [lowerAccepts componentsJoinedByString:@", "]; } } /* - * Detect `Content-Type` from contentTypeArray + * Detect `Content-Type` from contentTypes */ -+ (NSString *) selectHeaderContentType:(NSArray *)contentTypeArray ++ (NSString *) selectHeaderContentType:(NSArray *)contentTypes { - // if contentTypeArray is nil or empty, return `application/json` - if (contentTypeArray == nil || [contentTypeArray count] == 0) { - return @"application/json"; - } + if (contentTypes == nil || [contentTypes count] == 0) { + return @"application/json"; + } + + NSMutableArray *lowerContentTypes = [[NSMutableArray alloc] initWithCapacity:[contentTypes count]]; + [contentTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [lowerContentTypes addObject:[obj lowercaseString]]; + }]; - // if `application/json` in contentTypeArray, return it - if ([contentTypeArray containsObject:[@"application/json" lowercaseString]]) { - return @"applications/json"; - } - else { - return contentTypeArray[0]; - } + if ([lowerContentTypes containsObject:@"application/json"]) { + return @"application/json"; + } + else { + return lowerContentTypes[0]; + } } -(void)setHeaderValue:(NSString*) value diff --git a/samples/client/petstore/objc/client/SWGPetApi.m b/samples/client/petstore/objc/client/SWGPetApi.m index 2589241dbe4..9f2b79c51f8 100644 --- a/samples/client/petstore/objc/client/SWGPetApi.m +++ b/samples/client/petstore/objc/client/SWGPetApi.m @@ -84,14 +84,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[@"application/json", @"application/xml", ]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/json", @"application/xml"]]; id bodyDictionary = nil; @@ -174,15 +182,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; -<<<<<<< HEAD -======= - NSArray* requestContentTypes = @[@"application/json", @"application/xml"]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - ->>>>>>> develop_2.0 NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; @@ -190,14 +189,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[@"application/json", @"application/xml", ]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/json", @"application/xml"]]; id bodyDictionary = nil; @@ -293,14 +300,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -386,14 +401,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -477,22 +500,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; - - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; - - NSLog(@"--------------------------------"); - NSLog(@"request type: %@", requestContentType); - NSLog(@"response type: %@", responseContentType); - NSLog(@"headers: %@", headerParams); - NSLog(@"--------------------------------"); + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -574,15 +597,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [SWGApiClient escape:petId]]; -<<<<<<< HEAD -======= - NSArray* requestContentTypes = @[@"application/x-www-form-urlencoded"]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - ->>>>>>> develop_2.0 NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; @@ -590,14 +604,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[@"application/x-www-form-urlencoded", ]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/x-www-form-urlencoded"]]; id bodyDictionary = nil; @@ -688,14 +710,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -763,15 +793,6 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [SWGApiClient escape:petId]]; -<<<<<<< HEAD -======= - NSArray* requestContentTypes = @[@"multipart/form-data"]; - NSString* requestContentType = [requestContentTypes count] > 0 ? requestContentTypes[0] : @"application/json"; - - NSArray* responseContentTypes = @[@"application/json", @"application/xml"]; - NSString* responseContentType = [responseContentTypes count] > 0 ? responseContentTypes[0] : @"application/json"; - ->>>>>>> develop_2.0 NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; @@ -779,14 +800,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[@"multipart/form-data", ]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"multipart/form-data"]]; id bodyDictionary = nil; diff --git a/samples/client/petstore/objc/client/SWGStoreApi.m b/samples/client/petstore/objc/client/SWGStoreApi.m index e4ac4f4e8c0..75875ff4eae 100644 --- a/samples/client/petstore/objc/client/SWGStoreApi.m +++ b/samples/client/petstore/objc/client/SWGStoreApi.m @@ -81,14 +81,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -161,14 +169,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -276,14 +292,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -368,14 +392,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; diff --git a/samples/client/petstore/objc/client/SWGUserApi.m b/samples/client/petstore/objc/client/SWGUserApi.m index 30af7788af7..3e87268a4c6 100644 --- a/samples/client/petstore/objc/client/SWGUserApi.m +++ b/samples/client/petstore/objc/client/SWGUserApi.m @@ -83,14 +83,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -180,14 +188,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -277,14 +293,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -384,14 +408,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -468,14 +500,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -546,14 +586,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -640,14 +688,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; @@ -741,14 +797,22 @@ static NSString * basePath = @"http://petstore.swagger.io/v2"; // HTTP header `Accept` - NSArray *headerAccept = @[@"application/json", @"application/xml"]; - headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:headerAccept]; - NSString *responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } - // HTTP header `Content-Type` - NSArray *headerContentType = @[]; - headerParams[@"Content-Type"] = [SWGApiClient selectHeaderContentType:headerContentType]; - NSString *requestContentType = headerParams[@"Content-Type"]; + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; id bodyDictionary = nil; From 2514f3aa08ddccb6a70764f8a91f40b993173590 Mon Sep 17 00:00:00 2001 From: geekerzp Date: Sat, 23 May 2015 15:29:38 +0800 Subject: [PATCH 40/47] update SWGApiClient.h of objc client. --- .../swagger-codegen/src/main/resources/objc/SWGApiClient.h | 4 ++-- samples/client/petstore/objc/client/SWGApiClient.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h index 3edada7a4c7..cd6f52db5c6 100644 --- a/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h +++ b/modules/swagger-codegen/src/main/resources/objc/SWGApiClient.h @@ -48,8 +48,8 @@ extern NSString *const SWGResponseObjectErrorKey; +(void) configureCacheReachibilityForHost:(NSString*)host; -+(NSString *) selectHeaderAccept:(NSArray *)headerAcceptArray; -+(NSString *) selectHeaderContentType:(NSArray *)headerContentTypeArray; ++(NSString *) selectHeaderAccept:(NSArray *)accepts; ++(NSString *) selectHeaderContentType:(NSArray *)contentTypes; -(void)setHeaderValue:(NSString*) value forKey:(NSString*) forKey; diff --git a/samples/client/petstore/objc/client/SWGApiClient.h b/samples/client/petstore/objc/client/SWGApiClient.h index 3edada7a4c7..cd6f52db5c6 100644 --- a/samples/client/petstore/objc/client/SWGApiClient.h +++ b/samples/client/petstore/objc/client/SWGApiClient.h @@ -48,8 +48,8 @@ extern NSString *const SWGResponseObjectErrorKey; +(void) configureCacheReachibilityForHost:(NSString*)host; -+(NSString *) selectHeaderAccept:(NSArray *)headerAcceptArray; -+(NSString *) selectHeaderContentType:(NSArray *)headerContentTypeArray; ++(NSString *) selectHeaderAccept:(NSArray *)accepts; ++(NSString *) selectHeaderContentType:(NSArray *)contentTypes; -(void)setHeaderValue:(NSString*) value forKey:(NSString*) forKey; From f9ed8a9a084773d4bc29cf2623228c58ac8ef692 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sat, 23 May 2015 08:33:40 -0700 Subject: [PATCH 41/47] updated test to get expected value --- .../java/src/test/java/io/swagger/petstore/test/PetApiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java index 97f3b5f8006..1bee31e0748 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -104,7 +104,7 @@ public class PetApiTest { api.updatePetWithForm(String.valueOf(fetched.getId()), "furt", null); Pet updated = api.getPetById(fetched.getId()); - assertEquals(updated.getName(), fetched.getName()); + assertEquals(updated.getName(), "furt"); } @Test From d447c423b55c2923f7e2b74043658ede71cd9ed0 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sat, 23 May 2015 08:33:48 -0700 Subject: [PATCH 42/47] updated test to get expected value --- .../java/io/swagger/client/ApiInvoker.java | 77 ++++++++++++------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java index ab6f551327f..69d13136274 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java @@ -18,6 +18,7 @@ import javax.ws.rs.core.MediaType; import java.util.Collection; import java.util.Map; +import java.util.Map.Entry; import java.util.HashMap; import java.util.List; import java.util.Date; @@ -195,47 +196,42 @@ public class ApiInvoker { response = (ClientResponse) builder.get(ClientResponse.class); } else if ("POST".equals(method)) { - if(body == null) + if (contentType.startsWith("application/x-www-form-urlencoded")) { + String encodedFormParams = this + .getXWWWFormUrlencodedParams(formParams); + response = builder.type(contentType).post(ClientResponse.class, + encodedFormParams); + } else if (body == null) { response = builder.post(ClientResponse.class, null); - else if(body instanceof FormDataMultiPart) { + } else if(body instanceof FormDataMultiPart) { response = builder.type(contentType).post(ClientResponse.class, body); } else response = builder.type(contentType).post(ClientResponse.class, serialize(body)); } else if ("PUT".equals(method)) { - if(body == null) + if ("application/x-www-form-urlencoded".equals(contentType)) { + String encodedFormParams = this + .getXWWWFormUrlencodedParams(formParams); + response = builder.type(contentType).put(ClientResponse.class, + encodedFormParams); + } else if(body == null) { response = builder.put(ClientResponse.class, serialize(body)); - else { - if("application/x-www-form-urlencoded".equals(contentType)) { - StringBuilder formParamBuilder = new StringBuilder(); - - // encode the form params - for(String key : formParams.keySet()) { - String value = formParams.get(key); - if(value != null && !"".equals(value.trim())) { - if(formParamBuilder.length() > 0) { - formParamBuilder.append("&"); - } - try { - formParamBuilder.append(URLEncoder.encode(key, "utf8")).append("=").append(URLEncoder.encode(value, "utf8")); - } - catch (Exception e) { - // move on to next - } - } - } - response = builder.type(contentType).put(ClientResponse.class, formParamBuilder.toString()); - } - else + } else { response = builder.type(contentType).put(ClientResponse.class, serialize(body)); } } else if ("DELETE".equals(method)) { - if(body == null) + if ("application/x-www-form-urlencoded".equals(contentType)) { + String encodedFormParams = this + .getXWWWFormUrlencodedParams(formParams); + response = builder.type(contentType).delete(ClientResponse.class, + encodedFormParams); + } else if(body == null) { response = builder.delete(ClientResponse.class); - else + } else { response = builder.type(contentType).delete(ClientResponse.class, serialize(body)); + } } else { throw new ApiException(500, "unknown method type " + method); @@ -267,6 +263,31 @@ public class ApiInvoker { } } + private String getXWWWFormUrlencodedParams(Map formParams) { + StringBuilder formParamBuilder = new StringBuilder(); + + for (Entry param : formParams.entrySet()) { + String keyStr = ApiInvoker.parameterToString(param.getKey()); + String valueStr = ApiInvoker.parameterToString(param.getValue()); + + try { + formParamBuilder.append(URLEncoder.encode(keyStr, "utf8")) + .append("=") + .append(URLEncoder.encode(valueStr, "utf8")); + formParamBuilder.append("&"); + } catch (UnsupportedEncodingException e) { + // move on to next + } + } + String encodedFormParams = formParamBuilder.toString(); + if (encodedFormParams.endsWith("&")) { + encodedFormParams = encodedFormParams.substring(0, + encodedFormParams.length() - 1); + } + return encodedFormParams; + } + + private Client getClient(String host) { if(!hostMap.containsKey(host)) { Client client = Client.create(); @@ -276,4 +297,4 @@ public class ApiInvoker { } return hostMap.get(host); } -} +} \ No newline at end of file From ad9b7907122222a2719eaa161927a8a8d7d9cc70 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sat, 23 May 2015 09:04:06 -0700 Subject: [PATCH 43/47] updated sample --- samples/server/petstore/jaxrs/pom.xml | 19 ++ .../java/io/swagger/api/ApiException.java | 0 .../java/io/swagger/api/ApiOriginFilter.java | 0 .../io/swagger/api/ApiResponseMessage.java | 0 .../io/swagger/api/NotFoundException.java | 0 .../src/gen/java/io/swagger/api/PetApi.java | 156 ++++++++++++++++ .../java/io/swagger/api/PetApiService.java | 47 +++++ .../src/gen/java/io/swagger/api/StoreApi.java | 94 ++++++++++ .../java/io/swagger/api/StoreApiService.java | 35 ++++ .../src/gen/java/io/swagger/api/UserApi.java | 150 ++++++++++++++++ .../java/io/swagger/api/UserApiService.java | 47 +++++ .../java/io/swagger/model/Category.java | 0 .../java/io/swagger/model/Order.java | 0 .../java/io/swagger/model/Pet.java | 0 .../java/io/swagger/model/Tag.java | 0 .../java/io/swagger/model/User.java | 0 .../src/main/java/io/swagger/api/PetApi.java | 167 ------------------ .../main/java/io/swagger/api/StoreApi.java | 97 ---------- .../src/main/java/io/swagger/api/UserApi.java | 161 ----------------- .../api/factories/PetApiServiceFactory.java | 14 ++ .../api/factories/StoreApiServiceFactory.java | 14 ++ .../api/factories/UserApiServiceFactory.java | 14 ++ .../swagger/api/impl/PetApiServiceImpl.java | 79 +++++++++ .../swagger/api/impl/StoreApiServiceImpl.java | 51 ++++++ .../swagger/api/impl/UserApiServiceImpl.java | 79 +++++++++ 25 files changed, 799 insertions(+), 425 deletions(-) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/api/ApiException.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/api/ApiOriginFilter.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/api/ApiResponseMessage.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/api/NotFoundException.java (100%) create mode 100644 samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java create mode 100644 samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java create mode 100644 samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java create mode 100644 samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java create mode 100644 samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java create mode 100644 samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/model/Category.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/model/Order.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/model/Pet.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/model/Tag.java (100%) rename samples/server/petstore/jaxrs/src/{main => gen}/java/io/swagger/model/User.java (100%) delete mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/PetApi.java delete mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/StoreApi.java delete mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/UserApi.java create mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java create mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java create mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java create mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java create mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java create mode 100644 samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java diff --git a/samples/server/petstore/jaxrs/pom.xml b/samples/server/petstore/jaxrs/pom.xml index b57a4fd416d..825dec0f766 100644 --- a/samples/server/petstore/jaxrs/pom.xml +++ b/samples/server/petstore/jaxrs/pom.xml @@ -62,6 +62,25 @@ + + org.codehaus.mojo + build-helper-maven-plugin + 1.9.1 + + + add-source + generate-sources + + add-source + + + + src/gen/java + + + + + diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/api/ApiException.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/api/ApiOriginFilter.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/api/ApiResponseMessage.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/api/NotFoundException.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java new file mode 100644 index 00000000000..d5fd9c48e07 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -0,0 +1,156 @@ +package io.swagger.api; + +import io.swagger.model.*; +import io.swagger.api.PetApiService; +import io.swagger.api.factories.PetApiServiceFactory; + +import com.wordnik.swagger.annotations.ApiParam; + +import com.sun.jersey.multipart.FormDataParam; + +import io.swagger.model.Pet; +import java.io.File; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; +import javax.ws.rs.*; + +@Path("/pet") + + +@com.wordnik.swagger.annotations.Api(value = "/pet", description = "the pet API") +public class PetApi { + + private final PetApiService delegate = PetApiServiceFactory.getPetApi(); + + @PUT + + @Consumes({ "application/json", "application/xml" }) + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 405, message = "Validation exception"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Pet not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) + + public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) + throws NotFoundException { + // do some magic! + return delegate.updatePet(body); + } + @POST + + @Consumes({ "application/json", "application/xml" }) + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 405, message = "Invalid input") }) + + public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) + throws NotFoundException { + // do some magic! + return delegate.addPet(body); + } + @GET + @Path("/findByStatus") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List") + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid status value") }) + + public Response findPetsByStatus(@ApiParam(value = "Status values that need to be considered for filter", defaultValue="available") @QueryParam("status") List status) + throws NotFoundException { + // do some magic! + return delegate.findPetsByStatus(status); + } + @GET + @Path("/findByTags") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List") + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid tag value") }) + + public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List tags) + throws NotFoundException { + // do some magic! + return delegate.findPetsByTags(tags); + } + @GET + @Path("/{petId}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Pet not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) + + public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("petId") Long petId) + throws NotFoundException { + // do some magic! + return delegate.getPetById(petId); + } + @POST + @Path("/{petId}") + @Consumes({ "application/x-www-form-urlencoded" }) + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 405, message = "Invalid input") }) + + public Response updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated",required=true ) @PathParam("petId") String petId, + @ApiParam(value = "Updated name of the pet" )@FormParam("name") String name, + @ApiParam(value = "Updated status of the pet" )@FormParam("status") String status) + throws NotFoundException { + // do some magic! + return delegate.updatePetWithForm(petId,name,status); + } + @DELETE + @Path("/{petId}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value") }) + + public Response deletePet(@ApiParam(value = "" )@HeaderParam("api_key") String apiKey, + @ApiParam(value = "Pet id to delete",required=true ) @PathParam("petId") Long petId) + throws NotFoundException { + // do some magic! + return delegate.deletePet(apiKey,petId); + } + @POST + @Path("/{petId}/uploadImage") + @Consumes({ "multipart/form-data" }) + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) + + public Response uploadFile(@ApiParam(value = "ID of pet to update",required=true ) @PathParam("petId") Long petId, + @ApiParam(value = "Additional data to pass to server" )@FormParam("additionalMetadata") String additionalMetadata, + @ApiParam(value = "file to upload") @FormDataParam("file") InputStream inputStream, + @ApiParam(value = "file detail") @FormDataParam("file") FormDataContentDisposition fileDetail) + throws NotFoundException { + // do some magic! + return delegate.uploadFile(petId,additionalMetadata,fileDetail); + } +} + diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java new file mode 100644 index 00000000000..6e8060269eb --- /dev/null +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -0,0 +1,47 @@ +package io.swagger.api; + +import io.swagger.api.*; +import io.swagger.model.*; + +import com.sun.jersey.multipart.FormDataParam; + +import io.swagger.model.Pet; +import java.io.File; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; + +public abstract class PetApiService { + + public abstract Response updatePet(Pet body) + throws NotFoundException; + + public abstract Response addPet(Pet body) + throws NotFoundException; + + public abstract Response findPetsByStatus(List status) + throws NotFoundException; + + public abstract Response findPetsByTags(List tags) + throws NotFoundException; + + public abstract Response getPetById(Long petId) + throws NotFoundException; + + public abstract Response updatePetWithForm(String petId,String name,String status) + throws NotFoundException; + + public abstract Response deletePet(String apiKey,Long petId) + throws NotFoundException; + + public abstract Response uploadFile(Long petId,String additionalMetadata,FormDataContentDisposition fileDetail) + throws NotFoundException; + +} diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java new file mode 100644 index 00000000000..7c8dff02ffa --- /dev/null +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -0,0 +1,94 @@ +package io.swagger.api; + +import io.swagger.model.*; +import io.swagger.api.StoreApiService; +import io.swagger.api.factories.StoreApiServiceFactory; + +import com.wordnik.swagger.annotations.ApiParam; + +import com.sun.jersey.multipart.FormDataParam; + +import java.util.Map; +import io.swagger.model.Order; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; +import javax.ws.rs.*; + +@Path("/store") + + +@com.wordnik.swagger.annotations.Api(value = "/store", description = "the store API") +public class StoreApi { + + private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); + + @GET + @Path("/inventory") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "map") + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation") }) + + public Response getInventory() + throws NotFoundException { + // do some magic! + return delegate.getInventory(); + } + @POST + @Path("/order") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Place an order for a pet", notes = "", response = Order.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid Order") }) + + public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body) + throws NotFoundException { + // do some magic! + return delegate.placeOrder(body); + } + @GET + @Path("/order/{orderId}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Order not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) + + public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("orderId") String orderId) + throws NotFoundException { + // do some magic! + return delegate.getOrderById(orderId); + } + @DELETE + @Path("/order/{orderId}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Order not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) + + public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true ) @PathParam("orderId") String orderId) + throws NotFoundException { + // do some magic! + return delegate.deleteOrder(orderId); + } +} + diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java new file mode 100644 index 00000000000..5566e9c9b57 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -0,0 +1,35 @@ +package io.swagger.api; + +import io.swagger.api.*; +import io.swagger.model.*; + +import com.sun.jersey.multipart.FormDataParam; + +import java.util.Map; +import io.swagger.model.Order; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; + +public abstract class StoreApiService { + + public abstract Response getInventory() + throws NotFoundException; + + public abstract Response placeOrder(Order body) + throws NotFoundException; + + public abstract Response getOrderById(String orderId) + throws NotFoundException; + + public abstract Response deleteOrder(String orderId) + throws NotFoundException; + +} diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java new file mode 100644 index 00000000000..f0c5493f848 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -0,0 +1,150 @@ +package io.swagger.api; + +import io.swagger.model.*; +import io.swagger.api.UserApiService; +import io.swagger.api.factories.UserApiServiceFactory; + +import com.wordnik.swagger.annotations.ApiParam; + +import com.sun.jersey.multipart.FormDataParam; + +import io.swagger.model.User; +import java.util.*; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; +import javax.ws.rs.*; + +@Path("/user") + + +@com.wordnik.swagger.annotations.Api(value = "/user", description = "the user API") +public class UserApi { + + private final UserApiService delegate = UserApiServiceFactory.getUserApi(); + + @POST + + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Create user", notes = "This can only be done by the logged in user.", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) + + public Response createUser(@ApiParam(value = "Created user object" ) User body) + throws NotFoundException { + // do some magic! + return delegate.createUser(body); + } + @POST + @Path("/createWithArray") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) + + public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body) + throws NotFoundException { + // do some magic! + return delegate.createUsersWithArrayInput(body); + } + @POST + @Path("/createWithList") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) + + public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body) + throws NotFoundException { + // do some magic! + return delegate.createUsersWithListInput(body); + } + @GET + @Path("/login") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Logs user into the system", notes = "", response = String.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid username/password supplied") }) + + public Response loginUser(@ApiParam(value = "The user name for login") @QueryParam("username") String username, + @ApiParam(value = "The password for login in clear text") @QueryParam("password") String password) + throws NotFoundException { + // do some magic! + return delegate.loginUser(username,password); + } + @GET + @Path("/logout") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Logs out current logged in user session", notes = "", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) + + public Response logoutUser() + throws NotFoundException { + // do some magic! + return delegate.logoutUser(); + } + @GET + @Path("/{username}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Get user by user name", notes = "", response = User.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "User not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied") }) + + public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing. ",required=true ) @PathParam("username") String username) + throws NotFoundException { + // do some magic! + return delegate.getUserByName(username); + } + @PUT + @Path("/{username}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "User not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied") }) + + public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true ) @PathParam("username") String username, + @ApiParam(value = "Updated user object" ) User body) + throws NotFoundException { + // do some magic! + return delegate.updateUser(username,body); + } + @DELETE + @Path("/{username}") + + @Produces({ "application/json", "application/xml" }) + @com.wordnik.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) + @com.wordnik.swagger.annotations.ApiResponses(value = { + @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "User not found"), + + @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied") }) + + public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true ) @PathParam("username") String username) + throws NotFoundException { + // do some magic! + return delegate.deleteUser(username); + } +} + diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java new file mode 100644 index 00000000000..6a09fcd0feb --- /dev/null +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -0,0 +1,47 @@ +package io.swagger.api; + +import io.swagger.api.*; +import io.swagger.model.*; + +import com.sun.jersey.multipart.FormDataParam; + +import io.swagger.model.User; +import java.util.*; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; + +public abstract class UserApiService { + + public abstract Response createUser(User body) + throws NotFoundException; + + public abstract Response createUsersWithArrayInput(List body) + throws NotFoundException; + + public abstract Response createUsersWithListInput(List body) + throws NotFoundException; + + public abstract Response loginUser(String username,String password) + throws NotFoundException; + + public abstract Response logoutUser() + throws NotFoundException; + + public abstract Response getUserByName(String username) + throws NotFoundException; + + public abstract Response updateUser(String username,User body) + throws NotFoundException; + + public abstract Response deleteUser(String username) + throws NotFoundException; + +} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Category.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Order.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Pet.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/model/Tag.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java similarity index 100% rename from samples/server/petstore/jaxrs/src/main/java/io/swagger/model/User.java rename to samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/PetApi.java deleted file mode 100644 index 8abaf768136..00000000000 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/PetApi.java +++ /dev/null @@ -1,167 +0,0 @@ -package io.swagger.api; - -import io.swagger.model.*; - -import com.wordnik.swagger.annotations.ApiParam; - -import com.sun.jersey.multipart.FormDataParam; - -import io.swagger.model.Pet; -import java.io.File; - -import java.util.List; -import io.swagger.api.NotFoundException; - -import java.io.InputStream; - -import com.sun.jersey.core.header.FormDataContentDisposition; -import com.sun.jersey.multipart.FormDataParam; - -import javax.ws.rs.core.Response; -import javax.ws.rs.*; - -@Path("/pet") - - -@com.wordnik.swagger.annotations.Api(value = "/pet", description = "the pet API") -public class PetApi { - - @PUT - - @Consumes({ "application/json", "application/xml" }) - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 405, message = "Validation exception"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Pet not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) - - public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @POST - - @Consumes({ "application/json", "application/xml" }) - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 405, message = "Invalid input") }) - - public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/findByStatus") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List") - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid status value") }) - - public Response findPetsByStatus(@ApiParam(value = "Status values that need to be considered for filter", defaultValue="available") @QueryParam("status") List status) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/findByTags") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Finds Pets by tags", notes = "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", response = Pet.class, responseContainer = "List") - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid tag value") }) - - public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List tags) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/{petId}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Pet not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) - - public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("petId") Long petId) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @POST - @Path("/{petId}") - @Consumes({ "application/x-www-form-urlencoded" }) - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 405, message = "Invalid input") }) - - public Response updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated",required=true ) @PathParam("petId") String petId, - @ApiParam(value = "Updated name of the pet" )@FormParam("name") String name, - @ApiParam(value = "Updated status of the pet" )@FormParam("status") String status) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @DELETE - @Path("/{petId}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value") }) - - public Response deletePet(@ApiParam(value = "" )@HeaderParam("api_key") String apiKey, - @ApiParam(value = "Pet id to delete",required=true ) @PathParam("petId") Long petId) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @POST - @Path("/{petId}/uploadImage") - @Consumes({ "multipart/form-data" }) - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) - - public Response uploadFile(@ApiParam(value = "ID of pet to update",required=true ) @PathParam("petId") Long petId, - @ApiParam(value = "Additional data to pass to server" )@FormParam("additionalMetadata") String additionalMetadata, - @ApiParam(value = "file to upload") @FormDataParam("file") InputStream inputStream, - @ApiParam(value = "file detail") @FormDataParam("file") FormDataContentDisposition fileDetail) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - -} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/StoreApi.java deleted file mode 100644 index 660f6317422..00000000000 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/StoreApi.java +++ /dev/null @@ -1,97 +0,0 @@ -package io.swagger.api; - -import io.swagger.model.*; - -import com.wordnik.swagger.annotations.ApiParam; - -import com.sun.jersey.multipart.FormDataParam; - -import java.util.Map; -import io.swagger.model.Order; - -import java.util.List; -import io.swagger.api.NotFoundException; - -import java.io.InputStream; - -import com.sun.jersey.core.header.FormDataContentDisposition; -import com.sun.jersey.multipart.FormDataParam; - -import javax.ws.rs.core.Response; -import javax.ws.rs.*; - -@Path("/store") - - -@com.wordnik.swagger.annotations.Api(value = "/store", description = "the store API") -public class StoreApi { - - @GET - @Path("/inventory") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Returns pet inventories by status", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "map") - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation") }) - - public Response getInventory() - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @POST - @Path("/order") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Place an order for a pet", notes = "", response = Order.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid Order") }) - - public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/order/{orderId}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Find purchase order by ID", notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", response = Order.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Order not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) - - public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathParam("orderId") String orderId) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @DELETE - @Path("/order/{orderId}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "Order not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied") }) - - public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true ) @PathParam("orderId") String orderId) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - -} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/UserApi.java deleted file mode 100644 index d907b8b579b..00000000000 --- a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/UserApi.java +++ /dev/null @@ -1,161 +0,0 @@ -package io.swagger.api; - -import io.swagger.model.*; - -import com.wordnik.swagger.annotations.ApiParam; - -import com.sun.jersey.multipart.FormDataParam; - -import io.swagger.model.User; -import java.util.*; - -import java.util.List; -import io.swagger.api.NotFoundException; - -import java.io.InputStream; - -import com.sun.jersey.core.header.FormDataContentDisposition; -import com.sun.jersey.multipart.FormDataParam; - -import javax.ws.rs.core.Response; -import javax.ws.rs.*; - -@Path("/user") - - -@com.wordnik.swagger.annotations.Api(value = "/user", description = "the user API") -public class UserApi { - - @POST - - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Create user", notes = "This can only be done by the logged in user.", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) - - public Response createUser(@ApiParam(value = "Created user object" ) User body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @POST - @Path("/createWithArray") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) - - public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @POST - @Path("/createWithList") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) - - public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/login") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Logs user into the system", notes = "", response = String.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid username/password supplied") }) - - public Response loginUser(@ApiParam(value = "The user name for login") @QueryParam("username") String username, - @ApiParam(value = "The password for login in clear text") @QueryParam("password") String password) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/logout") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Logs out current logged in user session", notes = "", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 0, message = "successful operation") }) - - public Response logoutUser() - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @GET - @Path("/{username}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Get user by user name", notes = "", response = User.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "User not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 200, message = "successful operation"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied") }) - - public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing. ",required=true ) @PathParam("username") String username) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @PUT - @Path("/{username}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "User not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied") }) - - public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true ) @PathParam("username") String username, - @ApiParam(value = "Updated user object" ) User body) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - - @DELETE - @Path("/{username}") - - @Produces({ "application/json", "application/xml" }) - @com.wordnik.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class) - @com.wordnik.swagger.annotations.ApiResponses(value = { - @com.wordnik.swagger.annotations.ApiResponse(code = 404, message = "User not found"), - - @com.wordnik.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied") }) - - public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true ) @PathParam("username") String username) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - - -} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java new file mode 100644 index 00000000000..56ad64c3212 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/PetApiServiceFactory.java @@ -0,0 +1,14 @@ +package io.swagger.api.factories; + +import io.swagger.api.PetApiService; +import io.swagger.api.impl.PetApiServiceImpl; + +public class PetApiServiceFactory { + + private final static PetApiService service = new PetApiServiceImpl(); + + public static PetApiService getPetApi() + { + return service; + } +} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java new file mode 100644 index 00000000000..d60aa7d8660 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/StoreApiServiceFactory.java @@ -0,0 +1,14 @@ +package io.swagger.api.factories; + +import io.swagger.api.StoreApiService; +import io.swagger.api.impl.StoreApiServiceImpl; + +public class StoreApiServiceFactory { + + private final static StoreApiService service = new StoreApiServiceImpl(); + + public static StoreApiService getStoreApi() + { + return service; + } +} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java new file mode 100644 index 00000000000..5db4914a878 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/factories/UserApiServiceFactory.java @@ -0,0 +1,14 @@ +package io.swagger.api.factories; + +import io.swagger.api.UserApiService; +import io.swagger.api.impl.UserApiServiceImpl; + +public class UserApiServiceFactory { + + private final static UserApiService service = new UserApiServiceImpl(); + + public static UserApiService getUserApi() + { + return service; + } +} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java new file mode 100644 index 00000000000..069a8419623 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/PetApiServiceImpl.java @@ -0,0 +1,79 @@ +package io.swagger.api.impl; + +import io.swagger.api.*; +import io.swagger.model.*; + +import com.sun.jersey.multipart.FormDataParam; + +import io.swagger.model.Pet; +import java.io.File; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; + +public class PetApiServiceImpl extends PetApiService { + + @Override + public Response updatePet(Pet body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response addPet(Pet body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response findPetsByStatus(List status) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response findPetsByTags(List tags) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response getPetById(Long petId) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response updatePetWithForm(String petId,String name,String status) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response deletePet(String apiKey,Long petId) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response uploadFile(Long petId,String additionalMetadata,FormDataContentDisposition fileDetail) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + +} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java new file mode 100644 index 00000000000..84e8938f2f9 --- /dev/null +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/StoreApiServiceImpl.java @@ -0,0 +1,51 @@ +package io.swagger.api.impl; + +import io.swagger.api.*; +import io.swagger.model.*; + +import com.sun.jersey.multipart.FormDataParam; + +import java.util.Map; +import io.swagger.model.Order; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; + +public class StoreApiServiceImpl extends StoreApiService { + + @Override + public Response getInventory() + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response placeOrder(Order body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response getOrderById(String orderId) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response deleteOrder(String orderId) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + +} diff --git a/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java new file mode 100644 index 00000000000..b7735c7ac9e --- /dev/null +++ b/samples/server/petstore/jaxrs/src/main/java/io/swagger/api/impl/UserApiServiceImpl.java @@ -0,0 +1,79 @@ +package io.swagger.api.impl; + +import io.swagger.api.*; +import io.swagger.model.*; + +import com.sun.jersey.multipart.FormDataParam; + +import io.swagger.model.User; +import java.util.*; + +import java.util.List; +import io.swagger.api.NotFoundException; + +import java.io.InputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +import javax.ws.rs.core.Response; + +public class UserApiServiceImpl extends UserApiService { + + @Override + public Response createUser(User body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response createUsersWithArrayInput(List body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response createUsersWithListInput(List body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response loginUser(String username,String password) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response logoutUser() + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response getUserByName(String username) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response updateUser(String username,User body) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + + @Override + public Response deleteUser(String username) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + +} From 85c37fbe2702e16f8b72365f5ba719cfd99037e7 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sat, 23 May 2015 09:04:40 -0700 Subject: [PATCH 44/47] fix for #781 --- .../swagger-codegen/src/main/resources/scala/api.mustache | 2 +- .../src/main/scala/io/swagger/client/api/PetApi.scala | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/scala/api.mustache b/modules/swagger-codegen/src/main/resources/scala/api.mustache index 9452a10c56a..87b04b5900f 100644 --- a/modules/swagger-codegen/src/main/resources/scala/api.mustache +++ b/modules/swagger-codegen/src/main/resources/scala/api.mustache @@ -30,7 +30,7 @@ class {{classname}}(val defBasePath: String = "{{basePath}}", {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} */ - def {{nickname}} ({{#allParams}}{{paramName}}: {{dataType}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {{#returnType}}: Option[{{returnType}}]{{/returnType}} = { + def {{nickname}} ({{#allParams}}{{paramName}}: {{dataType}}{{#defaultValue}} /* = {{{defaultValue}}} */{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {{#returnType}}: Option[{{returnType}}]{{/returnType}} = { // create path and map variables val path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{baseName}}" + "\\}",apiInvoker.escape({{paramName}})) diff --git a/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala b/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala index bdf489c08c0..0d0b3c83ed2 100644 --- a/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala +++ b/samples/client/petstore/scala/src/main/scala/io/swagger/client/api/PetApi.scala @@ -123,7 +123,7 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2", * @param status Status values that need to be considered for filter * @return List[Pet] */ - def findPetsByStatus (status: List[String] = available) : Option[List[Pet]] = { + def findPetsByStatus (status: List[String] /* = available */) : Option[List[Pet]] = { // create path and map variables val path = "/pet/findByStatus".replaceAll("\\{format\\}","json") @@ -325,11 +325,11 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2", /** * Deletes a pet * - * @param api_key + * @param apiKey * @param petId Pet id to delete * @return void */ - def deletePet (api_key: String, petId: Long) = { + def deletePet (apiKey: String, petId: Long) = { // create path and map variables val path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}",apiInvoker.escape(petId)) @@ -347,7 +347,7 @@ class PetApi(val defBasePath: String = "http://petstore.swagger.io/v2", - headerParams += "api_key" -> api_key + headerParams += "api_key" -> apiKey var postBody: AnyRef = null From 087c28dae427061892ca14f32b012b80a9e662b4 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Sat, 23 May 2015 09:04:46 -0700 Subject: [PATCH 45/47] rebuilt client --- samples/client/petstore/qt5cpp/client/SWGPetApi.cpp | 2 +- samples/client/petstore/qt5cpp/client/SWGPetApi.h | 2 +- samples/client/petstore/tizen/client/SamiPetApi.cpp | 4 ++-- samples/client/petstore/tizen/client/SamiPetApi.h | 2 +- samples/dynamic-html/docs/operations/PetApi.html | 2 +- samples/html/index.html | 10 +++++----- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp index af7b2371ebc..0be3a197cd1 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp @@ -431,7 +431,7 @@ SWGPetApi::updatePetWithFormCallback(HttpRequestWorker * worker) { emit updatePetWithFormSignal(); } void -SWGPetApi::deletePet(QString* api_key, qint64 petId) { +SWGPetApi::deletePet(QString* apiKey, qint64 petId) { QString fullPath; fullPath.append(this->host).append(this->basePath).append("/pet/{petId}"); diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.h b/samples/client/petstore/qt5cpp/client/SWGPetApi.h index 2f65cade2c4..488865729b9 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.h +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.h @@ -28,7 +28,7 @@ public: void findPetsByTags(QList* tags); void getPetById(qint64 petId); void updatePetWithForm(QString* petId, QString* name, QString* status); - void deletePet(QString* api_key, qint64 petId); + void deletePet(QString* apiKey, qint64 petId); void uploadFile(qint64 petId, QString* additionalMetadata, SWGHttpRequestInputFileElement* file); private: diff --git a/samples/client/petstore/tizen/client/SamiPetApi.cpp b/samples/client/petstore/tizen/client/SamiPetApi.cpp index 35c4900a9ac..69997d3cee0 100644 --- a/samples/client/petstore/tizen/client/SamiPetApi.cpp +++ b/samples/client/petstore/tizen/client/SamiPetApi.cpp @@ -380,7 +380,7 @@ deletePetProcessor(HttpResponse* pHttpResponse, void (* handler)(void*, SamiErro } void -SamiPetApi::deletePetWithCompletion(String* api_key, Long* petId, void(*success)(SamiError*)) { +SamiPetApi::deletePetWithCompletion(String* apiKey, Long* petId, void(*success)(SamiError*)) { client = new SamiApiClient(); client->success(&deletePetProcessor, (void(*)(void*, SamiError*))success); @@ -388,7 +388,7 @@ SamiPetApi::deletePetWithCompletion(String* api_key, Long* petId, void(*success) headerParams->Construct(); - headerParams->Add(new String("api_key"), api_key); + headerParams->Add(new String("api_key"), apiKey); diff --git a/samples/client/petstore/tizen/client/SamiPetApi.h b/samples/client/petstore/tizen/client/SamiPetApi.h index 10a957a87b8..05844bd88bd 100644 --- a/samples/client/petstore/tizen/client/SamiPetApi.h +++ b/samples/client/petstore/tizen/client/SamiPetApi.h @@ -39,7 +39,7 @@ public: updatePetWithFormWithCompletion(String* petId, String* name, String* status, void(* handler)(SamiError*)); void - deletePetWithCompletion(String* api_key, Long* petId, void(* handler)(SamiError*)); + deletePetWithCompletion(String* apiKey, Long* petId, void(* handler)(SamiError*)); void uploadFileWithCompletion(Long* petId, String* additionalMetadata, SamiFile* file, void(* handler)(SamiError*)); diff --git a/samples/dynamic-html/docs/operations/PetApi.html b/samples/dynamic-html/docs/operations/PetApi.html index 0fd5a9ae3c6..0c7bb8bd189 100644 --- a/samples/dynamic-html/docs/operations/PetApi.html +++ b/samples/dynamic-html/docs/operations/PetApi.html @@ -209,7 +209,7 @@ Header: - api_key + apiKey String

diff --git a/samples/html/index.html b/samples/html/index.html index 9d47aa360eb..3cfd67d8d59 100644 --- a/samples/html/index.html +++ b/samples/html/index.html @@ -235,7 +235,7 @@

Parameters

-
api_key (optional)
+
apiKey (optional)
Header Parameter
petId (required)
@@ -332,7 +332,7 @@ "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-05-21T05:49:06.118+0000" + "shipDate" : "2015-05-23T15:56:49.441+0000" }

Example data

@@ -341,7 +341,7 @@ <id>123456</id> <petId>123456</petId> <quantity>0</quantity> - <shipDate>2015-05-20T22:49:06.120Z</shipDate> + <shipDate>2015-05-23T08:56:49.444Z</shipDate> <status>string</status> <complete>true</complete> </Order> @@ -375,7 +375,7 @@ "complete" : true, "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-05-21T05:49:06.121+0000" + "shipDate" : "2015-05-23T15:56:49.445+0000" }

Example data

@@ -384,7 +384,7 @@ <id>123456</id> <petId>123456</petId> <quantity>0</quantity> - <shipDate>2015-05-20T22:49:06.122Z</shipDate> + <shipDate>2015-05-23T08:56:49.445Z</shipDate> <status>string</status> <complete>true</complete> </Order> From 5d581c3b03207047d20129b7f984b3dc788a3158 Mon Sep 17 00:00:00 2001 From: Alexey Nechaev Date: Fri, 8 May 2015 14:21:29 +0300 Subject: [PATCH 46/47] Fixes #429: Handling of composed models has been added. --- .../swagger/codegen/DefaultCodegen.java | 194 ++++++++---------- .../test/scala/Java/JavaInheritanceTest.scala | 28 +++ .../src/test/scala/Objc/ObjcModelTest.scala | 10 +- .../src/test/scala/scala/ScalaModelTest.scala | 6 +- 4 files changed, 126 insertions(+), 112 deletions(-) create mode 100644 modules/swagger-codegen/src/test/scala/Java/JavaInheritanceTest.scala diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index cd957722483..2513bedfcb9 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -1,10 +1,30 @@ package com.wordnik.swagger.codegen; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.annotation.Nullable; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.common.base.Function; import com.google.common.collect.Lists; - import com.wordnik.swagger.codegen.examples.ExampleGenerator; import com.wordnik.swagger.models.ArrayModel; +import com.wordnik.swagger.models.ComposedModel; import com.wordnik.swagger.models.Model; import com.wordnik.swagger.models.ModelImpl; import com.wordnik.swagger.models.Operation; @@ -40,27 +60,9 @@ import com.wordnik.swagger.models.properties.RefProperty; import com.wordnik.swagger.models.properties.StringProperty; import com.wordnik.swagger.util.Json; -import javax.annotation.Nullable; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.lang.StringUtils; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class DefaultCodegen { - Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); protected String outputFolder = ""; protected Set defaultIncludes = new HashSet(); @@ -473,100 +475,28 @@ public class DefaultCodegen { m.classVarName = toVarName(name); m.modelJson = Json.pretty(model); m.externalDocs = model.getExternalDocs(); - int count = 0; if(model instanceof ArrayModel) { ArrayModel am = (ArrayModel) model; ArrayProperty arrayProperty = new ArrayProperty(am.getItems()); - CodegenProperty cp = fromProperty(name, arrayProperty); - if(cp.complexType != null && !defaultIncludes.contains(cp.complexType)) - m.imports.add(cp.complexType); - m.parent = toInstantiationType(arrayProperty); - String containerType = cp.containerType; - if(instantiationTypes.containsKey(containerType)) - m.imports.add(instantiationTypes.get(containerType)); - if(typeMapping.containsKey(containerType)) { - containerType = typeMapping.get(containerType); - cp.containerType = containerType; - m.imports.add(containerType); - } + addParentContainer(m, name, arrayProperty); } else if (model instanceof RefModel) { // TODO - } - else { + } else if (model instanceof ComposedModel) { + final ComposedModel composed = (ComposedModel) model; + final RefModel parent = (RefModel) composed.getParent(); + final String parentModel = toModelName(parent.getSimpleRef()); + m.parent = parentModel; + addImport(m, parentModel); + final ModelImpl child = (ModelImpl) composed.getChild(); + addVars(m, child.getProperties(), child.getRequired()); + } else { ModelImpl impl = (ModelImpl) model; if(impl.getAdditionalProperties() != null) { MapProperty mapProperty = new MapProperty(impl.getAdditionalProperties()); - CodegenProperty cp = fromProperty(name, mapProperty); - if(cp.complexType != null && !defaultIncludes.contains(cp.complexType)) - m.imports.add(cp.complexType); - m.parent = toInstantiationType(mapProperty); - String containerType = cp.containerType; - if(instantiationTypes.containsKey(containerType)) - m.imports.add(instantiationTypes.get(containerType)); - if(typeMapping.containsKey(containerType)) { - containerType = typeMapping.get(containerType); - cp.containerType = containerType; - m.imports.add(containerType); - } - } - if(impl.getProperties() != null && impl.getProperties().size() > 0) { - m.hasVars = true; - m.hasEnums = false; - for(String key: impl.getProperties().keySet()) { - Property prop = impl.getProperties().get(key); - - if(prop == null) { - LOGGER.warn("null property for " + key); - } - else { - CodegenProperty cp; - try{ - cp = fromProperty(key, prop); - } - catch(Exception e) { - System.out.println("failed to process model " + name); - throw new RuntimeException(e); - } - cp.required = null; - if(impl.getRequired() != null) { - for(String req : impl.getRequired()) { - if(key.equals(req)) - cp.required = true; - } - } - if(cp.complexType != null && !defaultIncludes.contains(cp.complexType)) { - m.imports.add(cp.complexType); - } - m.vars.add(cp); - count += 1; - if (cp.isEnum) - m.hasEnums = true; - if(count != impl.getProperties().keySet().size()) - cp.hasMore = new Boolean(true); - if(cp.isContainer != null) { - String arrayImport = typeMapping.get("array"); - if(arrayImport != null && - !languageSpecificPrimitives.contains(arrayImport) && - !defaultIncludes.contains(arrayImport)) - m.imports.add(arrayImport); - } - - if(cp.complexType != null && - !languageSpecificPrimitives.contains(cp.complexType) && - !defaultIncludes.contains(cp.complexType)) - m.imports.add(cp.complexType); - - if(cp.baseType != null && - !languageSpecificPrimitives.contains(cp.baseType) && - !defaultIncludes.contains(cp.baseType)) - m.imports.add(cp.baseType); - } - } - } - else { - m.emptyVars = true; + addParentContainer(m, name, mapProperty); } + addVars(m, impl.getProperties(), impl.getRequired()); } return m; } @@ -1149,6 +1079,62 @@ 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); + m.parent = toInstantiationType(property); + final String containerType = tmp.containerType; + final String instantiationType = instantiationTypes.get(containerType); + if (instantiationType != null) { + addImport(m, instantiationType); + } + final String mappedType = typeMapping.get(containerType); + if (mappedType != null) { + addImport(m, mappedType); + } + } + + private void addImport(CodegenModel m, String type) { + if (type != null && !languageSpecificPrimitives.contains(type) && !defaultIncludes.contains(type)) { + m.imports.add(type); + } + } + + private void addVars(CodegenModel m, Map properties, Collection required) { + if (properties != null && properties.size() > 0) { + m.hasVars = true; + m.hasEnums = false; + final int totalCount = properties.size(); + final Set mandatory = required == null ? Collections. emptySet() : new HashSet(required); + int count = 0; + for (Map.Entry entry : properties.entrySet()) { + final String key = entry.getKey(); + final Property prop = entry.getValue(); + + if (prop == null) { + LOGGER.warn("null property for " + key); + } else { + final CodegenProperty cp = fromProperty(key, prop); + cp.required = mandatory.contains(key) ? true : null; + if (cp.isEnum) { + m.hasEnums = true; + } + count += 1; + if (count != totalCount) + cp.hasMore = true; + if (cp.isContainer != null) { + addImport(m, typeMapping.get("array")); + } + addImport(m, cp.baseType); + addImport(m, cp.complexType); + m.vars.add(cp); + } + } + } else { + m.emptyVars = true; + } + } + /* underscore and camelize are copied from Twitter elephant bird * https://github.com/twitter/elephant-bird/blob/master/core/src/main/java/com/twitter/elephantbird/util/Strings.java */ diff --git a/modules/swagger-codegen/src/test/scala/Java/JavaInheritanceTest.scala b/modules/swagger-codegen/src/test/scala/Java/JavaInheritanceTest.scala new file mode 100644 index 00000000000..1b6cfc0ecfd --- /dev/null +++ b/modules/swagger-codegen/src/test/scala/Java/JavaInheritanceTest.scala @@ -0,0 +1,28 @@ +package Java + +import scala.collection.JavaConverters._ + +import org.junit.runner.RunWith +import org.scalatest.FlatSpec +import org.scalatest.Matchers +import org.scalatest.junit.JUnitRunner +import com.wordnik.swagger.codegen.languages.JavaClientCodegen +import com.wordnik.swagger.models.ComposedModel +import com.wordnik.swagger.models.ModelImpl +import com.wordnik.swagger.models.RefModel +import com.wordnik.swagger.models.properties.StringProperty + +@RunWith(classOf[JUnitRunner]) +class JavaInheritanceTest extends FlatSpec with Matchers { + it should "convert a composed model" in { + val model = new ComposedModel().parent(new RefModel("Base")).child(new ModelImpl().additionalProperties(new StringProperty())) + + val codegen = new JavaClientCodegen() + val cm = codegen.fromModel("sample", model) + + cm.name should be("sample") + cm.classname should be("Sample") + cm.parent should be("Base") + cm.imports.asScala should be (Set("Base")) + } +} diff --git a/modules/swagger-codegen/src/test/scala/Objc/ObjcModelTest.scala b/modules/swagger-codegen/src/test/scala/Objc/ObjcModelTest.scala index 6255c4deacc..4de884885e4 100644 --- a/modules/swagger-codegen/src/test/scala/Objc/ObjcModelTest.scala +++ b/modules/swagger-codegen/src/test/scala/Objc/ObjcModelTest.scala @@ -1,4 +1,4 @@ -package objc +package Objc import com.wordnik.swagger.codegen.languages.ObjcClientCodegen import com.wordnik.swagger.util.Json @@ -217,8 +217,8 @@ class ObjcModelTest extends FlatSpec with Matchers { cm.description should be ("an array model") cm.vars.size should be (0) cm.parent should be ("NSMutableArray") - cm.imports.size should be (3) - (cm.imports.asScala.toSet & Set("SWGChildren", "NSArray", "NSMutableArray")).size should be (3) + cm.imports.size should be (1) + (cm.imports.asScala.toSet & Set("SWGChildren")).size should be (1) } it should "convert an map model" in { @@ -234,8 +234,8 @@ class ObjcModelTest extends FlatSpec with Matchers { cm.description should be ("an map model") cm.vars.size should be (0) cm.parent should be ("NSMutableDictionary") - cm.imports.size should be (3) - (cm.imports.asScala.toSet & Set("SWGChildren", "NSDictionary", "NSMutableDictionary")).size should be (3) + cm.imports.size should be (1) + (cm.imports.asScala.toSet & Set("SWGChildren")).size should be (1) } it should "create proper imports per #316" in { diff --git a/modules/swagger-codegen/src/test/scala/scala/ScalaModelTest.scala b/modules/swagger-codegen/src/test/scala/scala/ScalaModelTest.scala index 090e4cd5ffe..39d76ca168c 100644 --- a/modules/swagger-codegen/src/test/scala/scala/ScalaModelTest.scala +++ b/modules/swagger-codegen/src/test/scala/scala/ScalaModelTest.scala @@ -1,4 +1,4 @@ -package Java +package scala import com.wordnik.swagger.codegen.languages.ScalaClientCodegen import com.wordnik.swagger.util.Json @@ -218,8 +218,8 @@ class ScalaModelTest extends FlatSpec with Matchers { cm.description should be ("an array model") cm.vars.size should be (0) cm.parent should be ("ListBuffer[Children]") - cm.imports.size should be (3) - (cm.imports.asScala.toSet & Set("List", "ListBuffer", "Children")).size should be (3) + cm.imports.size should be (2) + (cm.imports.asScala.toSet & Set("ListBuffer", "Children")).size should be (2) } it should "convert an map model" in { From e93a37798257f8692f7c8fd268a5bb4df1e34bda Mon Sep 17 00:00:00 2001 From: rlo2014 Date: Wed, 27 May 2015 14:55:28 -0700 Subject: [PATCH 47/47] Removing comment (// do some magic!) that is no longer necessary and confusing. After olensmar refactor of jax-rs codegen, magic/implementation should be placed in the delegate/implementation as opposed to the api itself. Any logic put in api itself will be overwritten with the next code gen, whereas the delegate implemenation will remain intact. --- .../swagger-codegen/src/main/resources/JavaJaxRS/api.mustache | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache index a883850de19..a0afd38f634 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/api.mustache @@ -44,7 +44,6 @@ public class {{classname}} { public Response {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) throws NotFoundException { - // do some magic! return delegate.{{nickname}}({{#allParams}}{{#isFile}}fileDetail{{/isFile}}{{^isFile}}{{paramName}}{{/isFile}}{{#hasMore}},{{/hasMore}}{{/allParams}}); } {{/operation}}