From 78352dd4545b0ada3c29b653c86114f8eb169172 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Tue, 3 Nov 2015 23:24:01 +0100 Subject: [PATCH 01/47] First steps on Android Volley ApiInvoker --- .../android-volley/apiInvoker.mustache | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache new file mode 100644 index 00000000000..540ea296ca0 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -0,0 +1,282 @@ +package {{invokerPackage}}; + +import com.google.gson.JsonParseException; + +public class ApiInvoker { + private static ApiInvoker INSTANCE; + private Map defaultHeaderMap = new HashMap(); + + Context context; + RequestQueue mRequestQueue; + + /** Content type "text/plain" with UTF-8 encoding. */ + public static final ContentType TEXT_PLAIN_UTF8 = ContentType.create("text/plain", Consts.UTF_8); + + /** + * ISO 8601 date time format. + * @see https://en.wikipedia.org/wiki/ISO_8601 + */ + public static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + + /** + * ISO 8601 date format. + * @see https://en.wikipedia.org/wiki/ISO_8601 + */ + public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + + static { + // Use UTC as the default time zone. + DATE_TIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); + DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); + + // Set default User-Agent. + setUserAgent("Android-Java-Swagger"); + } + + public static void setUserAgent(String userAgent) { + INSTANCE.addDefaultHeader("User-Agent", userAgent); + } + + public static Date parseDateTime(String str) { + try { + return DATE_TIME_FORMAT.parse(str); + } catch (java.text.ParseException e) { + throw new RuntimeException(e); + } + } + + public static Date parseDate(String str) { + try { + return DATE_FORMAT.parse(str); + } catch (java.text.ParseException e) { + throw new RuntimeException(e); + } + } + + public static String formatDateTime(Date datetime) { + return DATE_TIME_FORMAT.format(datetime); + } + + public static String formatDate(Date date) { + return DATE_FORMAT.format(date); + } + + public static String parameterToString(Object param) { + if (param == null) { + return ""; + } else if (param instanceof Date) { + return formatDateTime((Date) param); + } else if (param instanceof Collection) { + StringBuilder b = new StringBuilder(); + for(Object o : (Collection)param) { + if(b.length() > 0) { + b.append(","); + } + b.append(String.valueOf(o)); + } + return b.toString(); + } else { + return String.valueOf(param); + } + } + + /* + Format to {@code Pair} objects. + */ + public static List parameterToPairs(String collectionFormat, String name, Object value){ + List params = new ArrayList(); + + // preconditions + if (name == null || name.isEmpty() || value == null) return params; + + Collection valueCollection = null; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + params.add(new Pair(name, parameterToString(value))); + return params; + } + + if (valueCollection.isEmpty()){ + return params; + } + + // get the collection format + collectionFormat = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat); // default: csv + + // create the params based on the collection format + if (collectionFormat.equals("multi")) { + for (Object item : valueCollection) { + params.add(new Pair(name, parameterToString(item))); + } + + return params; + } + + String delimiter = ","; + + if (collectionFormat.equals("csv")) { + delimiter = ","; + } else if (collectionFormat.equals("ssv")) { + delimiter = " "; + } else if (collectionFormat.equals("tsv")) { + delimiter = "\t"; + } else if (collectionFormat.equals("pipes")) { + delimiter = "|"; + } + + StringBuilder sb = new StringBuilder() ; + for (Object item : valueCollection) { + sb.append(delimiter); + sb.append(parameterToString(item)); + } + + params.add(new Pair(name, sb.substring(1))); + + return params; + } + + public static void initializeInstance(Context context) { + INSTANCE = new ApiInvoker(context); + setUserAgent("Android-Volley-Swagger"); + } + private ApiInvoker(Context context) { + this.context = context; + initConnectionManager(); + } + + public ApiInvoker() { + initConnectionManager(); + } + + public static ApiInvoker getInstance() { + return INSTANCE; + } + + public void addDefaultHeader(String key, String value) { + defaultHeaderMap.put(key, value); + } + + public String escapeString(String str) { + return str; + } + + public static Object deserialize(String json, String containerType, Class cls) throws ApiException { + try{ + if("list".equalsIgnoreCase(containerType) || "array".equalsIgnoreCase(containerType)) { + return JsonUtil.deserializeToList(json, cls); + } + else if(String.class.equals(cls)) { + if(json != null && json.startsWith("\"") && json.endsWith("\"") && json.length() > 1) + return json.substring(1, json.length() - 1); + else + return json; + } + else { + return JsonUtil.deserializeToObject(json, cls); + } + } + catch (JsonParseException e) { + throw new ApiException(500, e.getMessage()); + } + } + + public static String serialize(Object obj) throws ApiException { + try { + if (obj != null) + return JsonUtil.serialize(obj); + else + return null; + } + catch (Exception e) { + throw new ApiException(500, e.getMessage()); + } + } + + public void invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { + StringBuilder b = new StringBuilder(); + b.append("?"); + if (queryParams != null){ + for (Pair queryParam : queryParams){ + if (!queryParam.getName().isEmpty()) { + b.append(escapeString(queryParam.getName())); + b.append("="); + b.append(escapeString(queryParam.getValue())); + b.append("&"); + } + } + } + + String querystring = b.substring(0, b.length() - 1); + String url = host + path + querystring; + + HashMap headers = new HashMap(); + + for(String key : headerParams.keySet()) { + headers.put(key, headerParams.get(key)); + } + + for(String key : defaultHeaderMap.keySet()) { + if(!headerParams.containsKey(key)) { + headers.put(key, defaultHeaderMap.get(key)); + } + } + headers.put("Accept", "application/json"); + + // URL encoded string from form parameters + String formParamStr = null; + + // for form data + 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 + } + } + } + formParamStr = formParamBuilder.toString(); + } + + if ("GET".equals(method)) { + GetRequest request = new GetRequest(url, headers, null, stringRequest, errorListener); + mRequestQueue.add(request); + } + else if ("POST".equals(method)) { + PostRequest request = null; + if (formParamStr != null) { + request = new PostRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PostRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); + } + else if ("PUT".equals(method)) { + + } + else if ("DELETE".equals(method)) { + + } + else if ("PATCH".equals(method)) { + + } + } + + private void initConnectionManager() { + mRequestQueue = Volley.newRequestQueue(context); + } +} From 795b324fe54b09e1eae4dc6631408a87c8972956 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:01:48 +0100 Subject: [PATCH 02/47] Added imports to Android Volley apiInvoker --- .../android-volley/apiInvoker.mustache | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index 540ea296ca0..ad546aba86f 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -1,7 +1,25 @@ package {{invokerPackage}}; +import android.content.Context; + +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.toolbox.Volley; import com.google.gson.JsonParseException; +import org.apache.http.HttpEntity; +import org.apache.http.entity.StringEntity; + +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; + public class ApiInvoker { private static ApiInvoker INSTANCE; private Map defaultHeaderMap = new HashMap(); From a2aeb5a129f5f9be4390c5b3614cc646322a1d5e Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:04:07 +0100 Subject: [PATCH 03/47] Added ClientOptions android-volley --- .../AndroidVolleyClientOptionsTest.java | 48 +++++++++++++++++++ .../AndroidVolleyClientOptionsProvider.java | 45 +++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java new file mode 100644 index 00000000000..36946390fde --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java @@ -0,0 +1,48 @@ +package io.swagger.codegen.androidvolley; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.languages.AndroidVolleyClientCodegen; +import io.swagger.codegen.options.AndroidClientOptionsProvider; +import io.swagger.codegen.options.AndroidVolleyClientOptionsProvider; +import mockit.Expectations; +import mockit.Tested; + +public class AndroidVolleyClientOptionsTest extends AbstractOptionsTest { + + @Tested + private AndroidVolleyClientCodegen clientCodegen; + + public AndroidVolleyClientOptionsTest() { + super(new AndroidVolleyClientOptionsProvider()); + } + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(AndroidClientOptionsProvider.MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(AndroidClientOptionsProvider.API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(AndroidClientOptionsProvider.SORT_PARAMS_VALUE)); + times = 1; + clientCodegen.setInvokerPackage(AndroidClientOptionsProvider.INVOKER_PACKAGE_VALUE); + times = 1; + clientCodegen.setGroupId(AndroidClientOptionsProvider.GROUP_ID_VALUE); + times = 1; + clientCodegen.setArtifactId(AndroidClientOptionsProvider.ARTIFACT_ID_VALUE); + times = 1; + clientCodegen.setArtifactVersion(AndroidClientOptionsProvider.ARTIFACT_VERSION_VALUE); + times = 1; + clientCodegen.setSourceFolder(AndroidClientOptionsProvider.SOURCE_FOLDER_VALUE); + times = 1; + clientCodegen.setUseAndroidMavenGradlePlugin(Boolean.valueOf(AndroidClientOptionsProvider.ANDROID_MAVEN_GRADLE_PLUGIN_VALUE)); + times = 1; + }}; + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java new file mode 100644 index 00000000000..549d56b42fd --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java @@ -0,0 +1,45 @@ +package io.swagger.codegen.options; + +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.languages.AndroidVolleyClientCodegen; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + +public class AndroidVolleyClientOptionsProvider implements OptionsProvider { + public static final String ARTIFACT_ID_VALUE = "swagger-java-client-test"; + public static final String MODEL_PACKAGE_VALUE = "package"; + public static final String API_PACKAGE_VALUE = "apiPackage"; + public static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; + public static final String SORT_PARAMS_VALUE = "false"; + public static final String GROUP_ID_VALUE = "io.swagger.test"; + public static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; + public static final String SOURCE_FOLDER_VALUE = "src/main/java/test"; + public static final String ANDROID_MAVEN_GRADLE_PLUGIN_VALUE = "true"; + + @Override + public String getLanguage() { + return "android-volley"; + } + + @Override + public Map createOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) + .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) + .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE) + .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .put(AndroidVolleyClientCodegen.USE_ANDROID_MAVEN_GRADLE_PLUGIN, ANDROID_MAVEN_GRADLE_PLUGIN_VALUE) + .build(); + } + + @Override + public boolean isServer() { + return false; + } +} From 16bf228a41cb2c825375fae14b49dc8820291a43 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:04:31 +0100 Subject: [PATCH 04/47] Added model template android-volley --- .../resources/android-volley/model.mustache | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/model.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/model.mustache b/modules/swagger-codegen/src/main/resources/android-volley/model.mustache new file mode 100644 index 00000000000..6c805a832e4 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/model.mustache @@ -0,0 +1,52 @@ +package {{package}}; + +{{#imports}}import {{import}}; +{{/imports}} + +import io.swagger.annotations.*; +import com.google.gson.annotations.SerializedName; +{{#models}} + +{{#model}}{{#description}} +/** + * {{description}} + **/{{/description}} +@ApiModel(description = "{{{description}}}") +public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} { + {{#vars}}{{#isEnum}} + public enum {{datatypeWithEnum}} { + {{#allowableValues}}{{#values}} {{.}}, {{/values}}{{/allowableValues}} + }; + @SerializedName("{{baseName}}") + private {{{datatypeWithEnum}}} {{name}} = {{{defaultValue}}};{{/isEnum}}{{^isEnum}} + @SerializedName("{{baseName}}") + private {{{datatype}}} {{name}} = {{{defaultValue}}};{{/isEnum}}{{/vars}} + + {{#vars}} + /**{{#description}} + * {{{description}}}{{/description}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + **/ + @ApiModelProperty({{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") + public {{{datatypeWithEnum}}} {{getter}}() { + return {{name}}; + } + public void {{setter}}({{{datatypeWithEnum}}} {{name}}) { + this.{{name}} = {{name}}; + } + + {{/vars}} + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class {{classname}} {\n"); + {{#parent}}sb.append(" " + super.toString()).append("\n");{{/parent}} + {{#vars}}sb.append(" {{name}}: ").append({{name}}).append("\n"); + {{/vars}}sb.append("}\n"); + return sb.toString(); + } +} +{{/model}} +{{/models}} From efac324b739e8f732929dcd21e5ebda7da3313e1 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:05:24 +0100 Subject: [PATCH 05/47] Added api template android-volley --- .../resources/android-volley/api.mustache | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/api.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache new file mode 100644 index 00000000000..b255bbc4592 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -0,0 +1,128 @@ +package {{package}}; + +import {{invokerPackage}}.ApiException; +import {{invokerPackage}}.ApiInvoker; +import {{invokerPackage}}.Pair; + +import {{modelPackage}}.*; + +import java.util.*; + +{{#imports}}import {{import}}; +{{/imports}} + +import org.apache.http.HttpEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; + +import java.util.Map; +import java.util.HashMap; +import java.io.File; + +{{#operations}} +public class {{classname}} { + String basePath = "{{basePath}}"; + ApiInvoker apiInvoker = ApiInvoker.getInstance(); + + public void addHeader(String key, String value) { + getInvoker().addDefaultHeader(key, value); + } + + public ApiInvoker getInvoker() { + return apiInvoker; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + public String getBasePath() { + return basePath; + } + + {{#operation}} + /** + * {{summary}} + * {{notes}} +{{#allParams}} * @param {{paramName}} {{description}} +{{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} + */ + public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}, final {{#returnBaseType}}{{returnBaseType}}Responses.{{#returnContainer}}{{returnContainer}}{{/returnContainer}}{{returnBaseType}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener) { + Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; + {{#allParams}}{{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) { + throw new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}"); + } + {{/required}}{{/allParams}} + + // create path and map variables + String path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{baseName}}" + "\\}", apiInvoker.escapeString({{{paramName}}}.toString())){{/pathParams}}; + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + {{#queryParams}} + queryParams.addAll(ApiInvoker.parameterToPairs("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}})); + {{/queryParams}} + + {{#headerParams}} + headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}})); + {{/headerParams}} + + String[] contentTypes = { + {{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}} + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + {{#formParams}}{{#notFile}} + if ({{paramName}} != null) { + builder.addTextBody("{{baseName}}", ApiInvoker.parameterToString({{paramName}}), ApiInvoker.TEXT_PLAIN_UTF8); + } + {{/notFile}}{{#isFile}} + if ({{paramName}} != null) { + builder.addBinaryBody("{{baseName}}", {{paramName}}); + } + {{/isFile}}{{/formParams}} + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + {{#formParams}}{{#notFile}}formParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));{{/notFile}} + {{/formParams}} + } + + try { + apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType, + new Response.Listener() { + @Override + public void onResponse(String response) { + try { + responseListener.onResponse((List) ApiInvoker.deserialize(response, "array", Phone.class)); + } catch (ApiException exception) { + //TODO onError + Log.d("ERROR", "error"); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + //TODO onError + Log.d("ERROR", "error"); + } + }); + ); + } catch (ApiException ex) { + //TODO onError + } + } + {{/operation}} +} +{{/operations}} From acac1bb83b68b3eb6b0fb61be85eb6b7a858653b Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:05:43 +0100 Subject: [PATCH 06/47] Added GetRequest template android-volley --- .../android-volley/getrequest.mustache | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache new file mode 100644 index 00000000000..91be40c66a2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache @@ -0,0 +1,39 @@ +package io.swagger.client.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.Response; +import com.android.volley.toolbox.StringRequest; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class GetRequest extends StringRequest{ + Map apiHeaders; + String contentType; + + public GetRequest(String url, Map apiHeaders, String contentType, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.GET, url, listener, errorListener); + this.apiHeaders = apiHeaders; + this.contentType = contentType; + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From 090839fe06e8b047178b5b62bb87c5ea2467fef1 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:06:17 +0100 Subject: [PATCH 07/47] Added AndroidVolley ClientCodegen --- .../languages/AndroidVolleyClientCodegen.java | 280 ++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java new file mode 100644 index 00000000000..c696f58f85e --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -0,0 +1,280 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.CodegenType; +import io.swagger.codegen.DefaultCodegen; +import io.swagger.codegen.SupportingFile; +import io.swagger.models.properties.ArrayProperty; +import io.swagger.models.properties.MapProperty; +import io.swagger.models.properties.Property; + +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; + +import org.apache.commons.lang.StringUtils; + +public class AndroidVolleyClientCodegen extends DefaultCodegen implements CodegenConfig { + public static final String USE_ANDROID_MAVEN_GRADLE_PLUGIN = "useAndroidMavenGradlePlugin"; + protected String invokerPackage = "io.swagger.client"; + protected String groupId = "io.swagger"; + protected String artifactId = "swagger-android-volley-client"; + protected String artifactVersion = "1.0.0"; + protected String projectFolder = "src/main"; + protected String sourceFolder = projectFolder + "/java"; + protected Boolean useAndroidMavenGradlePlugin = true; + protected String requestPackage = "io.swagger.client.request"; + + public AndroidVolleyClientCodegen() { + super(); + outputFolder = "generated-code/android-volley"; + modelTemplateFiles.put("model.mustache", ".java"); + apiTemplateFiles.put("api.mustache", ".java"); + embeddedTemplateDir = templateDir = "android-volley"; + apiPackage = "io.swagger.client.api"; + modelPackage = "io.swagger.client.model"; + + reservedWords = new HashSet( + Arrays.asList( + "abstract", "continue", "for", "new", "switch", "assert", + "default", "if", "package", "synchronized", "boolean", "do", "goto", "private", + "this", "break", "double", "implements", "protected", "throw", "byte", "else", + "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", + "catch", "extends", "int", "short", "try", "char", "final", "interface", "static", + "void", "class", "finally", "long", "strictfp", "volatile", "const", "float", + "native", "super", "while") + ); + + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "String", + "boolean", + "Boolean", + "Double", + "Integer", + "Long", + "Float", + "Object") + ); + instantiationTypes.put("array", "ArrayList"); + instantiationTypes.put("map", "HashMap"); + + cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, "groupId for use in the generated build.gradle and pom.xml")); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, "artifactId for use in the generated build.gradle and pom.xml")); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, "artifact version for use in the generated build.gradle and pom.xml")); + cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC)); + cliOptions.add(new CliOption(USE_ANDROID_MAVEN_GRADLE_PLUGIN, "A flag to toggle android-maven gradle plugin. Default is true.")); + } + + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + public String getName() { + return "android-volley"; + } + + public String getHelp() { + return "Generates an Android client library."; + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } + + @Override + public String apiFileFolder() { + return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar); + } + + public String modelFileFolder() { + return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar); + } + + @Override + public String getTypeDeclaration(Property p) { + if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">"; + } else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + + return getSwaggerType(p) + ""; + } + 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 toVarName(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) { + return name; + } + + // camelize (lower first character) the variable name + // pet_id => petId + name = camelize(name, true); + + // for reserved word or word starting with number, append _ + if (reservedWords.contains(name) || name.matches("^\\d.*")) { + name = escapeReservedWord(name); + } + + return name; + } + + @Override + public String toParamName(String name) { + // should be the same as variable name + return toVarName(name); + } + + @Override + public String toModelName(String name) { + // model name cannot use reserved keyword, e.g. return + if (reservedWords.contains(name)) { + throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); + } + + // camelize the model name + // phone_number => PhoneNumber + return camelize(name); + } + + @Override + public String toModelFilename(String name) { + // should be the same as the model name + return toModelName(name); + } + + @Override + public String toOperationId(String operationId) { + // throw exception if method name is empty + if (StringUtils.isEmpty(operationId)) { + throw new RuntimeException("Empty method name (operationId) not allowed"); + } + + // method name cannot use reserved keyword, e.g. return + if (reservedWords.contains(operationId)) { + throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); + } + + return camelize(operationId, true); + } + + @Override + public void processOpts() { + super.processOpts(); + + if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { + this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE)); + } else { + //not set, use default to be passed to template + additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage); + } + + if (additionalProperties.containsKey(CodegenConstants.GROUP_ID)) { + this.setGroupId((String) additionalProperties.get(CodegenConstants.GROUP_ID)); + } else { + //not set, use to be passed to template + additionalProperties.put(CodegenConstants.GROUP_ID, groupId); + } + + if (additionalProperties.containsKey(CodegenConstants.ARTIFACT_ID)) { + this.setArtifactId((String) additionalProperties.get(CodegenConstants.ARTIFACT_ID)); + } else { + //not set, use to be passed to template + additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); + } + + if (additionalProperties.containsKey(CodegenConstants.ARTIFACT_VERSION)) { + this.setArtifactVersion((String) additionalProperties.get(CodegenConstants.ARTIFACT_VERSION)); + } else { + //not set, use to be passed to template + additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion); + } + + if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { + this.setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); + } + + if (additionalProperties.containsKey(USE_ANDROID_MAVEN_GRADLE_PLUGIN)) { + this.setUseAndroidMavenGradlePlugin(Boolean.valueOf((String) additionalProperties + .get(USE_ANDROID_MAVEN_GRADLE_PLUGIN))); + } else { + additionalProperties.put(USE_ANDROID_MAVEN_GRADLE_PLUGIN, useAndroidMavenGradlePlugin); + } + +// supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); + additionalProperties.put(USE_ANDROID_MAVEN_GRADLE_PLUGIN, useAndroidMavenGradlePlugin); + +// supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); +// supportingFiles.add(new SupportingFile("build.mustache", "", "build.gradle")); +// supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); + supportingFiles.add(new SupportingFile("apiInvoker.mustache", + (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java")); +// supportingFiles.add(new SupportingFile("httpPatch.mustache", +// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java")); +// supportingFiles.add(new SupportingFile("jsonUtil.mustache", +// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java")); +// supportingFiles.add(new SupportingFile("apiException.mustache", +// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java")); +// supportingFiles.add(new SupportingFile("Pair.mustache", +// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Pair.java")); + supportingFiles.add(new SupportingFile("getrequest.mustache", + (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "GetRequest.java")); + } + + public Boolean getUseAndroidMavenGradlePlugin() { + return useAndroidMavenGradlePlugin; + } + + public void setUseAndroidMavenGradlePlugin(Boolean useAndroidMavenGradlePlugin) { + this.useAndroidMavenGradlePlugin = useAndroidMavenGradlePlugin; + } + + public void setInvokerPackage(String invokerPackage) { + this.invokerPackage = invokerPackage; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public void setArtifactId(String artifactId) { + this.artifactId = artifactId; + } + + public void setArtifactVersion(String artifactVersion) { + this.artifactVersion = artifactVersion; + } + + public void setSourceFolder(String sourceFolder) { + this.sourceFolder = sourceFolder; + } + +} From c3679893df06e8e23df87de8a83c7512c7ddc576 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 4 Nov 2015 20:12:35 +0100 Subject: [PATCH 08/47] Added jsonUtil and Pair android-volley --- .../languages/AndroidVolleyClientCodegen.java | 8 +-- .../resources/android-volley/Pair.mustache | 38 +++++++++++++ .../android-volley/jsonUtil.mustache | 55 +++++++++++++++++++ 3 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/Pair.mustache create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/jsonUtil.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index c696f58f85e..1ea9da0898b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -239,12 +239,12 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java")); // supportingFiles.add(new SupportingFile("httpPatch.mustache", // (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java")); -// supportingFiles.add(new SupportingFile("jsonUtil.mustache", -// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java")); + supportingFiles.add(new SupportingFile("jsonUtil.mustache", + (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java")); // supportingFiles.add(new SupportingFile("apiException.mustache", // (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java")); -// supportingFiles.add(new SupportingFile("Pair.mustache", -// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Pair.java")); + supportingFiles.add(new SupportingFile("Pair.mustache", + (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Pair.java")); supportingFiles.add(new SupportingFile("getrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "GetRequest.java")); } diff --git a/modules/swagger-codegen/src/main/resources/android-volley/Pair.mustache b/modules/swagger-codegen/src/main/resources/android-volley/Pair.mustache new file mode 100644 index 00000000000..5456028a1a0 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/Pair.mustache @@ -0,0 +1,38 @@ +package {{invokerPackage}}; + +public class Pair { + private String name = ""; + private String value = ""; + + public Pair(String name, String value) { + setName(name); + setValue(value); + } + + private void setName(String name) { + if (!isValidString(name)) return; + + this.name = name; + } + + private void setValue(String value) { + if (!isValidString(value)) return; + + this.value = value; + } + + public String getName() { + return this.name; + } + + public String getValue() { + return this.value; + } + + private boolean isValidString(String arg) { + if (arg == null) return false; + if (arg.trim().isEmpty()) return false; + + return true; + } +} diff --git a/modules/swagger-codegen/src/main/resources/android-volley/jsonUtil.mustache b/modules/swagger-codegen/src/main/resources/android-volley/jsonUtil.mustache new file mode 100644 index 00000000000..ae8d18d3731 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/jsonUtil.mustache @@ -0,0 +1,55 @@ +package {{invokerPackage}}; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; +import java.util.List; +import {{modelPackage}}.*; + +public class JsonUtil { + public static GsonBuilder gsonBuilder; + + static { + gsonBuilder = new GsonBuilder(); + gsonBuilder.serializeNulls(); + gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + } + + public static Gson getGson() { + return gsonBuilder.create(); + } + + public static String serialize(Object obj){ + return getGson().toJson(obj); + } + + public static T deserializeToList(String jsonString, Class cls){ + return getGson().fromJson(jsonString, getListTypeForDeserialization(cls)); + } + + public static T deserializeToObject(String jsonString, Class cls){ + return getGson().fromJson(jsonString, getTypeForDeserialization(cls)); + } + + public static Type getListTypeForDeserialization(Class cls) { + String className = cls.getSimpleName(); + {{#models}}{{#model}} + if ("{{classname}}".equalsIgnoreCase(className)) { + return new TypeToken>(){}.getType(); + } + {{/model}}{{/models}} + return new TypeToken>(){}.getType(); + } + + public static Type getTypeForDeserialization(Class cls) { + String className = cls.getSimpleName(); + {{#models}}{{#model}} + if ("{{classname}}".equalsIgnoreCase(className)) { + return new TypeToken<{{classname}}>(){}.getType(); + } + {{/model}}{{/models}} + return new TypeToken(){}.getType(); + } + +}; From 5c79c21f3cdc7cd26a80645ea1f5efaaec3d3287 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 07:40:19 +0100 Subject: [PATCH 09/47] fixed Api returnType [android-volley] --- .../src/main/resources/android-volley/api.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index b255bbc4592..87e41695df4 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -1,6 +1,6 @@ package {{package}}; -import {{invokerPackage}}.ApiException; +import {{invokerPackage}}.Responses; import {{invokerPackage}}.ApiInvoker; import {{invokerPackage}}.Pair; @@ -46,7 +46,7 @@ public class {{classname}} { {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} */ - public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}, final {{#returnBaseType}}{{returnBaseType}}Responses.{{#returnContainer}}{{returnContainer}}{{/returnContainer}}{{returnBaseType}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener) { + public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}, final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener) { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set @@ -105,7 +105,7 @@ public class {{classname}} { @Override public void onResponse(String response) { try { - responseListener.onResponse((List) ApiInvoker.deserialize(response, "array", Phone.class)); + responseListener.onResponse({{returnType}}) ApiInvoker.deserialize(response, "array", Phone.class)); } catch (ApiException exception) { //TODO onError Log.d("ERROR", "error"); From e098e8f372d687c2d6972d4123d366509ff503a4 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 07:55:38 +0100 Subject: [PATCH 10/47] Added PostRequest [android-volley] --- .../languages/AndroidVolleyClientCodegen.java | 2 + .../android-volley/postrequest.mustache | 78 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 1ea9da0898b..3b546913554 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -247,6 +247,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Pair.java")); supportingFiles.add(new SupportingFile("getrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "GetRequest.java")); + supportingFiles.add(new SupportingFile("postrequest.mustache", + (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PostRequest.java")); } public Boolean getUseAndroidMavenGradlePlugin() { diff --git a/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache new file mode 100644 index 00000000000..7daf8360753 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache @@ -0,0 +1,78 @@ +package {{invokerPackage}}; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class PostRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public PostRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.POST, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + return Response.success("Uploaded", getCacheEntry()); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From f3ff567d3f94beb4fb251a401facc1e0272d3466 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 07:56:19 +0100 Subject: [PATCH 11/47] added default string response to api template [android-volley] --- .../src/main/resources/android-volley/api.mustache | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 87e41695df4..8cfc11b5ec4 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -105,7 +105,12 @@ public class {{classname}} { @Override public void onResponse(String response) { try { - responseListener.onResponse({{returnType}}) ApiInvoker.deserialize(response, "array", Phone.class)); + {{#returnType}} + responseListener.onResponse(({{{returnType}}}) ApiInvoker.deserialize(response, "array", {{returnBaseType}}.class)); + {{/returnType}} + {{^returnType}} + responseListener.onResponse(response); + {{/returnType}} } catch (ApiException exception) { //TODO onError Log.d("ERROR", "error"); From 980957b9a98b03145cacbdc862518f0d21ac9a6c Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 07:56:34 +0100 Subject: [PATCH 12/47] fix getrequest import [android-volley] --- .../src/main/resources/android-volley/getrequest.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache index 91be40c66a2..ec5907e6f5b 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache @@ -1,4 +1,4 @@ -package io.swagger.client.request; +package {{invokerPackage}}; import com.android.volley.AuthFailureError; import com.android.volley.Response; From c80ff7ed0dab26178667cc62a3d42f1f053a0887 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 07:57:33 +0100 Subject: [PATCH 13/47] Added responses class --- .../languages/AndroidVolleyClientCodegen.java | 2 ++ .../android-volley/responses.mustache | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/responses.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 3b546913554..1555b715ecd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -237,6 +237,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege // supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); supportingFiles.add(new SupportingFile("apiInvoker.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java")); + supportingFiles.add(new SupportingFile("response.mustache", + (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Responses.java")); // supportingFiles.add(new SupportingFile("httpPatch.mustache", // (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java")); supportingFiles.add(new SupportingFile("jsonUtil.mustache", diff --git a/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache b/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache new file mode 100644 index 00000000000..7a8cbf7e8d3 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache @@ -0,0 +1,19 @@ +package {{invokerPackage}}; + +import java.util.List; +import {{modelPackage}}.*; + +public class Responses { + {{#models}} + {{#model}} + public static interface {{classname}}Response { + public void onResponse({{classname}} {{classVarName}}); + } + } + public static interface {{classname}}ListResponse { + public void onResponse(List<{{classname}}> {{classVarName}}List); + } + } + {{/model}} + {{/models}} +} \ No newline at end of file From 52ebd25732469f612f05a80876f99769570b729c Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:02:00 +0100 Subject: [PATCH 14/47] Added responses class [android-volley] --- .../swagger/codegen/languages/AndroidVolleyClientCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 1555b715ecd..f537405090d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -237,7 +237,7 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege // supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); supportingFiles.add(new SupportingFile("apiInvoker.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java")); - supportingFiles.add(new SupportingFile("response.mustache", + supportingFiles.add(new SupportingFile("responses.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Responses.java")); // supportingFiles.add(new SupportingFile("httpPatch.mustache", // (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java")); From f5e757e6b96a4e327f85f17c7f30da4fac427cfb Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:05:15 +0100 Subject: [PATCH 15/47] Added build.gradle and AndroidManifest [android-volley] --- .../resources/android-volley/build.mustache | 91 +++++++++++++++++++ .../android-volley/manifest.mustache | 3 + 2 files changed, 94 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/build.mustache create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/build.mustache b/modules/swagger-codegen/src/main/resources/android-volley/build.mustache new file mode 100644 index 00000000000..ed1e7f7efcf --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/build.mustache @@ -0,0 +1,91 @@ +{{#useAndroidMavenGradlePlugin}} +group = '{{groupId}}' +project.version = '{{artifactVersion}}' +{{/useAndroidMavenGradlePlugin}} + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.2.2' + {{#useAndroidMavenGradlePlugin}} + classpath 'com.github.dcendents:android-maven-plugin:1.2' + {{/useAndroidMavenGradlePlugin}} + } +} + +allprojects { + repositories { + jcenter() + } +} + + +apply plugin: 'com.android.library' +{{#useAndroidMavenGradlePlugin}} +apply plugin: 'com.github.dcendents.android-maven' +{{/useAndroidMavenGradlePlugin}} + +android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } +} + + +ext { + swagger_annotations_version = "1.5.0" + gson_version = "2.3.1" + httpclient_version = "4.3.3" + junit_version = "4.8.1" +} + +dependencies { + compile "io.swagger:swagger-annotations:$swagger_annotations_version" + compile "com.google.code.gson:gson:$gson_version" + compile "org.apache.httpcomponents:httpcore:$httpclient_version" + compile "org.apache.httpcomponents:httpmime:$httpclient_version" + testCompile "junit:junit:$junit_version" +} + +afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } +} + +{{#useAndroidMavenGradlePlugin}} +task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' +} + +artifacts { + archives sourcesJar +} +{{/useAndroidMavenGradlePlugin}} diff --git a/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache new file mode 100644 index 00000000000..165749c3cc4 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache @@ -0,0 +1,3 @@ + + + From 84a22c83448f2c282027eb7636387f48f6a3ad88 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:54:18 +0100 Subject: [PATCH 16/47] Added build.gradle and AndroidManifest [android-volley] --- .../swagger/codegen/languages/AndroidVolleyClientCodegen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index f537405090d..ee2b563bbc2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -233,8 +233,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege additionalProperties.put(USE_ANDROID_MAVEN_GRADLE_PLUGIN, useAndroidMavenGradlePlugin); // supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); -// supportingFiles.add(new SupportingFile("build.mustache", "", "build.gradle")); -// supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); + supportingFiles.add(new SupportingFile("build.mustache", "", "build.gradle")); + supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); supportingFiles.add(new SupportingFile("apiInvoker.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java")); supportingFiles.add(new SupportingFile("responses.mustache", From b9abe2b51dbfbfd6448df6c1d335a383a41c768a Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:54:47 +0100 Subject: [PATCH 17/47] Added apiException template [android-volley] --- .../languages/AndroidVolleyClientCodegen.java | 4 +-- .../android-volley/apiException.mustache | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/apiException.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index ee2b563bbc2..0241c5f31ef 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -243,8 +243,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege // (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "HttpPatch.java")); supportingFiles.add(new SupportingFile("jsonUtil.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java")); -// supportingFiles.add(new SupportingFile("apiException.mustache", -// (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java")); + supportingFiles.add(new SupportingFile("apiException.mustache", + (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java")); supportingFiles.add(new SupportingFile("Pair.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Pair.java")); supportingFiles.add(new SupportingFile("getrequest.mustache", diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiException.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiException.mustache new file mode 100644 index 00000000000..a6bcba75b7c --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiException.mustache @@ -0,0 +1,29 @@ +package {{invokerPackage}}; + +public class ApiException extends Exception { + int code = 0; + String message = null; + + public ApiException() {} + + public ApiException(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} \ No newline at end of file From 7b811ad44b7beb7c272b211c1c40ad214b4a8fdd Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:55:10 +0100 Subject: [PATCH 18/47] various api template fixes [android-volley] --- .../src/main/resources/android-volley/api.mustache | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 8cfc11b5ec4..96f03dd1828 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -2,12 +2,16 @@ package {{package}}; import {{invokerPackage}}.Responses; import {{invokerPackage}}.ApiInvoker; +import {{invokerPackage}}.ApiException; import {{invokerPackage}}.Pair; import {{modelPackage}}.*; import java.util.*; +import com.android.volley.Response; +import com.android.volley.VolleyError; + {{#imports}}import {{import}}; {{/imports}} @@ -46,7 +50,7 @@ public class {{classname}} { {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} */ - public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}, final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener) { + public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}},{{/allParams}} final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set @@ -113,17 +117,14 @@ public class {{classname}} { {{/returnType}} } catch (ApiException exception) { //TODO onError - Log.d("ERROR", "error"); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - //TODO onError - Log.d("ERROR", "error"); + errorListener.onErrorResponse(error); } - }); - ); + }); } catch (ApiException ex) { //TODO onError } From 5c9606bc6662f8a2dc186a78e26272a0949f6b59 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:55:35 +0100 Subject: [PATCH 19/47] fix apiInvoker template imports [android-volley] --- .../src/main/resources/android-volley/apiInvoker.mustache | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index ad546aba86f..87e5e9edfb4 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -7,7 +7,9 @@ import com.android.volley.Response; import com.android.volley.toolbox.Volley; import com.google.gson.JsonParseException; +import org.apache.http.Consts; import org.apache.http.HttpEntity; +import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import java.net.URLEncoder; From b290d2d919b621534f0f48f210ab489666a3cc4e Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:56:08 +0100 Subject: [PATCH 20/47] fix responses template [android-volley] --- .../src/main/resources/android-volley/responses.mustache | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache b/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache index 7a8cbf7e8d3..bb4d463e2c5 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache @@ -8,11 +8,9 @@ public class Responses { {{#model}} public static interface {{classname}}Response { public void onResponse({{classname}} {{classVarName}}); - } } public static interface {{classname}}ListResponse { public void onResponse(List<{{classname}}> {{classVarName}}List); - } } {{/model}} {{/models}} From 93ed2e639dc6059f7a8d0d72292655868c18b4d5 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 08:56:26 +0100 Subject: [PATCH 21/47] added android-volley to CodegenConfig --- .../resources/META-INF/services/io.swagger.codegen.CodegenConfig | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig index 5d8a4f0fc6b..13cf4d7112d 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig @@ -1,4 +1,5 @@ io.swagger.codegen.languages.AndroidClientCodegen +io.swagger.codegen.languages.AndroidVolleyClientCodegen io.swagger.codegen.languages.AsyncScalaClientCodegen io.swagger.codegen.languages.CSharpClientCodegen io.swagger.codegen.languages.DartClientCodegen From f5aba6d0a54c92282ad82241d1596e1c40ee8b93 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 5 Nov 2015 22:52:20 +0100 Subject: [PATCH 22/47] removed faulty setuseragent [android-volley] --- .../src/main/resources/android-volley/apiInvoker.mustache | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index 87e5e9edfb4..ce96d62cf9f 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -48,9 +48,6 @@ public class ApiInvoker { // Use UTC as the default time zone. DATE_TIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); - - // Set default User-Agent. - setUserAgent("Android-Java-Swagger"); } public static void setUserAgent(String userAgent) { From b55f8802ac5f4444919ec688a2ecd45ef793ee8d Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sat, 7 Nov 2015 13:17:19 +0100 Subject: [PATCH 23/47] throw volley error on body post null [android-volley] --- .../src/main/resources/android-volley/api.mustache | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 96f03dd1828..0feca99aef9 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -55,7 +55,8 @@ public class {{classname}} { {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set if ({{paramName}} == null) { - throw new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}"); + VolleyError error = new VolleyError("Missing the required parameter '{{paramName}}' when calling {{nickname}}", + new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}")); } {{/required}}{{/allParams}} From cfdf2bc3b8e80d05927b0c18add374177e8b2fd0 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sat, 7 Nov 2015 13:31:44 +0100 Subject: [PATCH 24/47] fix returnContainer [android-volley] --- .../src/main/resources/android-volley/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 0feca99aef9..8815150576b 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -111,7 +111,7 @@ public class {{classname}} { public void onResponse(String response) { try { {{#returnType}} - responseListener.onResponse(({{{returnType}}}) ApiInvoker.deserialize(response, "array", {{returnBaseType}}.class)); + responseListener.onResponse(({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class)); {{/returnType}} {{^returnType}} responseListener.onResponse(response); From 2e4f6dc0a1b96d05379d6371e4bd619c53139b76 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sun, 8 Nov 2015 09:12:41 +0100 Subject: [PATCH 25/47] Added error listeners in api template [android-volley] --- .../src/main/resources/android-volley/api.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 8815150576b..fe1b0f20c0b 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -117,9 +117,9 @@ public class {{classname}} { responseListener.onResponse(response); {{/returnType}} } catch (ApiException exception) { - //TODO onError + errorListener.onErrorResponse(new VolleyError(exception)); + } } - } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { @@ -127,7 +127,7 @@ public class {{classname}} { } }); } catch (ApiException ex) { - //TODO onError + errorListener.onErrorResponse(new VolleyError(ex)); } } {{/operation}} From 5cfcb0b60b6e8b4f92d024ca8545ac419df40dfd Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sun, 8 Nov 2015 09:13:28 +0100 Subject: [PATCH 26/47] fixed response parsing in post request template [android-volley] --- .../main/resources/android-volley/postrequest.mustache | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache index 7daf8360753..80b2c4e8cdf 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache @@ -49,7 +49,13 @@ public class PostRequest extends Request { @Override protected Response parseNetworkResponse(NetworkResponse response) { - return Response.success("Uploaded", getCacheEntry()); + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); } @Override From 89b4d9b4e95cf0c419e64979689bc0fc69ef7fa3 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 11 Nov 2015 22:46:58 +0100 Subject: [PATCH 27/47] fixed requests packages and imports [android-volley] --- .../src/main/resources/android-volley/getrequest.mustache | 2 +- .../src/main/resources/android-volley/postrequest.mustache | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache index ec5907e6f5b..63803c3b481 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache @@ -1,4 +1,4 @@ -package {{invokerPackage}}; +package {{invokerPackage}}.request; import com.android.volley.AuthFailureError; import com.android.volley.Response; diff --git a/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache index 80b2c4e8cdf..2c61a0fa3d4 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache @@ -1,10 +1,11 @@ -package {{invokerPackage}}; +package {{invokerPackage}}.request; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; import org.apache.http.HttpEntity; From e054c3cfc01d3939e6dd41b92e284efd8370f9d2 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 12 Nov 2015 08:00:23 +0100 Subject: [PATCH 28/47] Moved request templates [android-volley] --- .../swagger/codegen/languages/AndroidVolleyClientCodegen.java | 4 ++-- .../android-volley/{ => request}/getrequest.mustache | 0 .../android-volley/{ => request}/postrequest.mustache | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename modules/swagger-codegen/src/main/resources/android-volley/{ => request}/getrequest.mustache (100%) rename modules/swagger-codegen/src/main/resources/android-volley/{ => request}/postrequest.mustache (100%) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 0241c5f31ef..27b730aed77 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -247,9 +247,9 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java")); supportingFiles.add(new SupportingFile("Pair.mustache", (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "Pair.java")); - supportingFiles.add(new SupportingFile("getrequest.mustache", + supportingFiles.add(new SupportingFile("request/getrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "GetRequest.java")); - supportingFiles.add(new SupportingFile("postrequest.mustache", + supportingFiles.add(new SupportingFile("request/postrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PostRequest.java")); } diff --git a/modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/getrequest.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/android-volley/getrequest.mustache rename to modules/swagger-codegen/src/main/resources/android-volley/request/getrequest.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/postrequest.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/android-volley/postrequest.mustache rename to modules/swagger-codegen/src/main/resources/android-volley/request/postrequest.mustache From 2af665a8e3ead9591fcb734f9af598da6d670678 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Fri, 13 Nov 2015 08:09:44 +0100 Subject: [PATCH 29/47] Added ApiKeyAuth implementation [android-volley] --- .../languages/AndroidVolleyClientCodegen.java | 5 ++ .../Java/auth/Authentication.mustache | 1 - .../resources/android-volley/api.mustache | 7 +- .../android-volley/apiInvoker.mustache | 81 ++++++++++++++++++- .../android-volley/auth/apikeyauth.mustache | 58 +++++++++++++ .../auth/authentication.mustache | 11 +++ 6 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/auth/apikeyauth.mustache create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/auth/authentication.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 27b730aed77..5b20019aa79 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -26,6 +26,7 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege protected String sourceFolder = projectFolder + "/java"; protected Boolean useAndroidMavenGradlePlugin = true; protected String requestPackage = "io.swagger.client.request"; + protected String authPackage = "io.swagger.client.auth"; public AndroidVolleyClientCodegen() { super(); @@ -251,6 +252,10 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "GetRequest.java")); supportingFiles.add(new SupportingFile("request/postrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PostRequest.java")); + supportingFiles.add(new SupportingFile("auth/apikeyauth.mustache", + (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "ApiKeyAuth.java")); + supportingFiles.add(new SupportingFile("auth/authentication.mustache", + (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "Authentication.java")); } public Boolean getUseAndroidMavenGradlePlugin() { diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache index 037ef58ab90..265c74cb76f 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache @@ -5,7 +5,6 @@ import {{invokerPackage}}.Pair; import java.util.Map; import java.util.List; -{{>generatedAnnotation}} public interface Authentication { /** Apply authentication settings to header and query params. */ void applyToParams(List queryParams, Map headerParams); diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index fe1b0f20c0b..b7bb96df0b1 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -52,7 +52,8 @@ public class {{classname}} { */ public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}},{{/allParams}} final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; - {{#allParams}}{{#required}} + + {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set if ({{paramName}} == null) { VolleyError error = new VolleyError("Missing the required parameter '{{paramName}}' when calling {{nickname}}", @@ -104,8 +105,10 @@ public class {{classname}} { {{/formParams}} } + String[] authNames = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} }; + try { - apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType, + apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType, authNames, new Response.Listener() { @Override public void onResponse(String response) { diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index ce96d62cf9f..73cf7fbf412 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -22,12 +22,17 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; +import {{invokerPackage}}.auth.Authentication; +import {{invokerPackage}}.auth.ApiKeyAuth; + public class ApiInvoker { private static ApiInvoker INSTANCE; private Map defaultHeaderMap = new HashMap(); - Context context; - RequestQueue mRequestQueue; + private Context context; + private RequestQueue mRequestQueue; + + private Map authentications; /** Content type "text/plain" with UTF-8 encoding. */ public static final ContentType TEXT_PLAIN_UTF8 = ContentType.create("text/plain", Consts.UTF_8); @@ -156,6 +161,16 @@ public class ApiInvoker { public static void initializeInstance(Context context) { INSTANCE = new ApiInvoker(context); setUserAgent("Android-Volley-Swagger"); + + // Setup authentications (key: authentication name, value: authentication). + INSTANCE.authentications = new HashMap(); + {{#authMethods}} + {{#isApiKey}} + INSTANCE.authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}")); + {{/isApiKey}} + {{/authMethods}} + // Prevent the authentications from being modified. + INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); } private ApiInvoker(Context context) { this.context = context; @@ -210,9 +225,69 @@ public class ApiInvoker { } } - public void invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { + /** + * Get authentications (key: authentication name, value: authentication). + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + + /** + * Helper method to set API key value for the first API key authentication. + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Update query and header parameters based on authentication settings. + * + * @param authNames The authentications to apply + */ + private void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams) { + for (String authName : authNames) { + Authentication auth = authentications.get(authName); + if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); + auth.applyToParams(queryParams, headerParams); + } + } + + public void invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { StringBuilder b = new StringBuilder(); b.append("?"); + + updateParamsForAuth(authNames, queryParams, headerParams); + if (queryParams != null){ for (Pair queryParam : queryParams){ if (!queryParam.getName().isEmpty()) { diff --git a/modules/swagger-codegen/src/main/resources/android-volley/auth/apikeyauth.mustache b/modules/swagger-codegen/src/main/resources/android-volley/auth/apikeyauth.mustache new file mode 100644 index 00000000000..a1824b551ca --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/auth/apikeyauth.mustache @@ -0,0 +1,58 @@ +package {{invokerPackage}}.auth; + +import {{invokerPackage}}.Pair; + +import java.util.Map; +import java.util.List; + +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void applyToParams(List queryParams, Map headerParams) { + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location == "query") { + queryParams.add(new Pair(paramName, value)); + } else if (location == "header") { + headerParams.put(paramName, value); + } + } +} diff --git a/modules/swagger-codegen/src/main/resources/android-volley/auth/authentication.mustache b/modules/swagger-codegen/src/main/resources/android-volley/auth/authentication.mustache new file mode 100644 index 00000000000..265c74cb76f --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/auth/authentication.mustache @@ -0,0 +1,11 @@ +package {{invokerPackage}}.auth; + +import {{invokerPackage}}.Pair; + +import java.util.Map; +import java.util.List; + +public interface Authentication { + /** Apply authentication settings to header and query params. */ + void applyToParams(List queryParams, Map headerParams); +} From 3c275f1831e6453b4f0f64ff5e54ed537789ff8c Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 26 Nov 2015 14:52:26 +0100 Subject: [PATCH 30/47] try catch when string response removed --- .../src/main/resources/android-volley/api.mustache | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index b7bb96df0b1..20adddf2bbc 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -112,16 +112,18 @@ public class {{classname}} { new Response.Listener() { @Override public void onResponse(String response) { + {{#returnType}} try { - {{#returnType}} responseListener.onResponse(({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class)); {{/returnType}} {{^returnType}} responseListener.onResponse(response); {{/returnType}} + {{#returnType}} } catch (ApiException exception) { errorListener.onErrorResponse(new VolleyError(exception)); } + {{/returnType}} } }, new Response.ErrorListener() { @Override From c30720289b3c9f3b0cc5283859704380b30e6784 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Tue, 1 Dec 2015 07:52:59 +0100 Subject: [PATCH 31/47] Import corrections [android-volley] --- .../src/main/resources/android-volley/apiInvoker.mustache | 3 +++ .../main/resources/android-volley/request/postrequest.mustache | 1 + 2 files changed, 4 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index 73cf7fbf412..164bc8fc0e9 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -16,6 +16,7 @@ import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -24,6 +25,8 @@ import java.util.TimeZone; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.ApiKeyAuth; +import {{invokerPackage}}.request.GetRequest; +import {{invokerPackage}}.request.PostRequest; public class ApiInvoker { private static ApiInvoker INSTANCE; diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/postrequest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/postrequest.mustache index 2c61a0fa3d4..f11fddd25ef 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/request/postrequest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/request/postrequest.mustache @@ -11,6 +11,7 @@ import org.apache.http.HttpEntity; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.Collections; import java.util.HashMap; import java.util.Map; From 9b2a04c787a82f4bcc7fb55da8064fb600b7305f Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Tue, 1 Dec 2015 22:26:18 +0100 Subject: [PATCH 32/47] Added Android-Volley to readme and pom --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3f1691144b9..10bd3e464c6 100644 --- a/README.md +++ b/README.md @@ -288,6 +288,7 @@ $ ls -1 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ AbstractTypeScriptClientCodegen.java AkkaScalaClientCodegen.java AndroidClientCodegen.java +AndroidVolleyClientCodegen.java AsyncScalaClientCodegen.java CSharpClientCodegen.java ClojureClientCodegen.java From b28e0893f101953eaaae5609539c94d926714a21 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 10 Dec 2015 08:23:13 +0100 Subject: [PATCH 33/47] Added PUT request [android-volley] --- .../languages/AndroidVolleyClientCodegen.java | 2 + .../resources/android-volley/api.mustache | 2 +- .../android-volley/apiInvoker.mustache | 12 ++- .../android-volley/request/put.mustache | 86 +++++++++++++++++++ 4 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/request/put.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 5b20019aa79..c0a1eec511e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -252,6 +252,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "GetRequest.java")); supportingFiles.add(new SupportingFile("request/postrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PostRequest.java")); + supportingFiles.add(new SupportingFile("request/putrequest.mustache", + (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PutRequest.java")); supportingFiles.add(new SupportingFile("auth/apikeyauth.mustache", (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "ApiKeyAuth.java")); supportingFiles.add(new SupportingFile("auth/authentication.mustache", diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 20adddf2bbc..aaec4e235d2 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -25,7 +25,7 @@ import java.io.File; {{#operations}} public class {{classname}} { String basePath = "{{basePath}}"; - ApiInvoker apiInvoker = ApiInvoker.getInstance(); + ApiInvoker apiInvoker = ApiInvoker.getFInstance(); public void addHeader(String key, String value) { getInvoker().addDefaultHeader(key, value); diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index 164bc8fc0e9..ac70a1293fe 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -361,7 +361,17 @@ public class ApiInvoker { if(request != null) mRequestQueue.add(request); } else if ("PUT".equals(method)) { - + PutRequest request = null; + if (formParamStr != null) { + request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PutRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); } else if ("DELETE".equals(method)) { diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/put.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/put.mustache new file mode 100644 index 00000000000..9e54c7cfe9a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/request/put.mustache @@ -0,0 +1,86 @@ +package {{invokerPackage}}.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class PutRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public PutRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.PUT, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From a68ecf78095a1dec54c80c2e40d9ef9bde15b769 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 10 Dec 2015 08:26:46 +0100 Subject: [PATCH 34/47] Added [android-volley] petstore.sh --- bin/android-volley-petstore.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 bin/android-volley-petstore.sh diff --git a/bin/android-volley-petstore.sh b/bin/android-volley-petstore.sh new file mode 100644 index 00000000000..e1def487022 --- /dev/null +++ b/bin/android-volley-petstore.sh @@ -0,0 +1,33 @@ +#!/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/android-java -i ../modules/swagger-codegen/src/test/resources/2_0/petstore.json -l android -o samples/client/petstore/android-java" + +java $JAVA_OPTS -jar $executable $ags + +ping 127.0.0.1 -n 10 > nul \ No newline at end of file From cb9e4bf96175d0f314bc1b235c281a8c8ce3f375 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Tue, 15 Dec 2015 08:29:21 +0100 Subject: [PATCH 35/47] Added DELETE request [android-volley] --- .../languages/AndroidVolleyClientCodegen.java | 2 + .../android-volley/apiInvoker.mustache | 14 ++- .../android-volley/request/delete.mustache | 86 +++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/request/delete.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index c0a1eec511e..347de743231 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -254,6 +254,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PostRequest.java")); supportingFiles.add(new SupportingFile("request/putrequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PutRequest.java")); + supportingFiles.add(new SupportingFile("request/deleterequest.mustache", + (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "DeleteRequest.java")); supportingFiles.add(new SupportingFile("auth/apikeyauth.mustache", (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "ApiKeyAuth.java")); supportingFiles.add(new SupportingFile("auth/authentication.mustache", diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index ac70a1293fe..a5fb652007f 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -27,6 +27,8 @@ import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.ApiKeyAuth; import {{invokerPackage}}.request.GetRequest; import {{invokerPackage}}.request.PostRequest; +import {{invokerPackage}}.request.PutRequest; +import {{invokerPackage}}.request.DeleteRequest; public class ApiInvoker { private static ApiInvoker INSTANCE; @@ -374,7 +376,17 @@ public class ApiInvoker { if(request != null) mRequestQueue.add(request); } else if ("DELETE".equals(method)) { - + DeleteRequest request = null; + if (formParamStr != null) { + request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PutRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); } else if ("PATCH".equals(method)) { diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/delete.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/delete.mustache new file mode 100644 index 00000000000..0df3f6e4ac4 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/request/delete.mustache @@ -0,0 +1,86 @@ +package {{invokerPackage}}.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class DeleteRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public DeleteRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.DELETE, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From a897a2f28bec9b08d4a70290487186bb77b359bf Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Wed, 16 Dec 2015 14:53:04 +0100 Subject: [PATCH 36/47] Added PATCH request [android-volley] --- .../android-volley/apiInvoker.mustache | 21 +++-- .../android-volley/request/patch.mustache | 86 +++++++++++++++++++ 2 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/request/patch.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index a5fb652007f..f5b3a763d58 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -29,6 +29,7 @@ import {{invokerPackage}}.request.GetRequest; import {{invokerPackage}}.request.PostRequest; import {{invokerPackage}}.request.PutRequest; import {{invokerPackage}}.request.DeleteRequest; +import {{invokerPackage}}.request.PatchRequest; public class ApiInvoker { private static ApiInvoker INSTANCE; @@ -378,19 +379,29 @@ public class ApiInvoker { else if ("DELETE".equals(method)) { DeleteRequest request = null; if (formParamStr != null) { - request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + request = new DeleteRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { if (body instanceof HttpEntity) { - request = new PutRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + request = new DeleteRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); } else { - request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } if(request != null) mRequestQueue.add(request); } else if ("PATCH".equals(method)) { - - } + PatchRequest request = null; + if (formParamStr != null) { + request = new PatchRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PatchRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); + } } private void initConnectionManager() { diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/patch.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/patch.mustache new file mode 100644 index 00000000000..87270b48ebf --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/request/patch.mustache @@ -0,0 +1,86 @@ +package {{invokerPackage}}.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class PatchRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public PatchRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.PATCH, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From b91e5c95d56a7e977cb5530c42b12d5612777e23 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sun, 20 Dec 2015 16:38:39 +0100 Subject: [PATCH 37/47] Rename request templates and fixed patch request [android-volley] --- .../swagger/codegen/languages/AndroidVolleyClientCodegen.java | 2 ++ .../request/{delete.mustache => deleterequest.mustache} | 0 .../request/{patch.mustache => patchrequest.mustache} | 0 .../request/{put.mustache => putrequest.mustache} | 0 4 files changed, 2 insertions(+) rename modules/swagger-codegen/src/main/resources/android-volley/request/{delete.mustache => deleterequest.mustache} (100%) rename modules/swagger-codegen/src/main/resources/android-volley/request/{patch.mustache => patchrequest.mustache} (100%) rename modules/swagger-codegen/src/main/resources/android-volley/request/{put.mustache => putrequest.mustache} (100%) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 347de743231..91bf395369d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -256,6 +256,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PutRequest.java")); supportingFiles.add(new SupportingFile("request/deleterequest.mustache", (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "DeleteRequest.java")); + supportingFiles.add(new SupportingFile("request/patchrequest.mustache", + (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PatchRequest.java")); supportingFiles.add(new SupportingFile("auth/apikeyauth.mustache", (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "ApiKeyAuth.java")); supportingFiles.add(new SupportingFile("auth/authentication.mustache", diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/delete.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/deleterequest.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/android-volley/request/delete.mustache rename to modules/swagger-codegen/src/main/resources/android-volley/request/deleterequest.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/patch.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/patchrequest.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/android-volley/request/patch.mustache rename to modules/swagger-codegen/src/main/resources/android-volley/request/patchrequest.mustache diff --git a/modules/swagger-codegen/src/main/resources/android-volley/request/put.mustache b/modules/swagger-codegen/src/main/resources/android-volley/request/putrequest.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/android-volley/request/put.mustache rename to modules/swagger-codegen/src/main/resources/android-volley/request/putrequest.mustache From e9990d610f6c497abae9f4e0ba7821c3013f0596 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 21 Dec 2015 08:51:22 +0100 Subject: [PATCH 38/47] Fix API template [android-volley] --- .../src/main/resources/android-volley/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index aaec4e235d2..20adddf2bbc 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -25,7 +25,7 @@ import java.io.File; {{#operations}} public class {{classname}} { String basePath = "{{basePath}}"; - ApiInvoker apiInvoker = ApiInvoker.getFInstance(); + ApiInvoker apiInvoker = ApiInvoker.getInstance(); public void addHeader(String key, String value) { getInvoker().addDefaultHeader(key, value); From ea1cbdaf8fec1f410d9b1e4397999ed765a756bf Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Tue, 22 Dec 2015 03:06:53 +0100 Subject: [PATCH 39/47] Fix API template [android-volley] --- .../src/main/resources/android-volley/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index 20adddf2bbc..c1fbacf7e23 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -50,7 +50,7 @@ public class {{classname}} { {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} */ - public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}},{{/allParams}} final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { + public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}, {{/hasMore}}{{/allParams}}final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} From 602abdd242f55222808d4e8507acb6bd126b8ed2 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Tue, 22 Dec 2015 19:36:56 +0100 Subject: [PATCH 40/47] Added http basic authentication method [android-volley] --- .../languages/AndroidVolleyClientCodegen.java | 2 ++ .../android-volley/apiInvoker.mustache | 29 +++++++++++++++ .../auth/httpbasicauth.mustache | 35 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/android-volley/auth/httpbasicauth.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index 91bf395369d..e595fb6a223 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -260,6 +260,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege (sourceFolder + File.separator + requestPackage).replace(".", java.io.File.separator), "PatchRequest.java")); supportingFiles.add(new SupportingFile("auth/apikeyauth.mustache", (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "ApiKeyAuth.java")); + supportingFiles.add(new SupportingFile("auth/httpbasicauth.mustache", + (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "HttpBasicAuth.java")); supportingFiles.add(new SupportingFile("auth/authentication.mustache", (sourceFolder + File.separator + authPackage).replace(".", java.io.File.separator), "Authentication.java")); } diff --git a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache index f5b3a763d58..04e6fdbc05c 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/apiInvoker.mustache @@ -25,6 +25,7 @@ import java.util.TimeZone; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.ApiKeyAuth; +import {{invokerPackage}}.auth.HttpBasicAuth; import {{invokerPackage}}.request.GetRequest; import {{invokerPackage}}.request.PostRequest; import {{invokerPackage}}.request.PutRequest; @@ -174,6 +175,9 @@ public class ApiInvoker { {{#isApiKey}} INSTANCE.authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}")); {{/isApiKey}} + {{#isBasic}} + INSTANCE.authentications.put("{{name}}", new HttpBasicAuth()); + {{/isBasic}} {{/authMethods}} // Prevent the authentications from being modified. INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); @@ -248,6 +252,31 @@ public class ApiInvoker { return authentications.get(authName); } + /** + * Helper method to set username for the first HTTP basic authentication. + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } /** * Helper method to set API key value for the first API key authentication. diff --git a/modules/swagger-codegen/src/main/resources/android-volley/auth/httpbasicauth.mustache b/modules/swagger-codegen/src/main/resources/android-volley/auth/httpbasicauth.mustache new file mode 100644 index 00000000000..64fc61f95c1 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/android-volley/auth/httpbasicauth.mustache @@ -0,0 +1,35 @@ +package {{invokerPackage}}.auth; + +import {{invokerPackage}}.Pair; + +import android.util.Base64; + +import java.util.Map; +import java.util.List; + +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void applyToParams(List queryParams, Map headerParams) { + String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); + headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes(), Base64.DEFAULT)); + } +} From d162fc53629231bceaf1fffefe0c7dc666931cce Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 24 Dec 2015 12:11:12 +0100 Subject: [PATCH 41/47] Add permissions to manifest [android-volley] --- .../src/main/resources/android-volley/manifest.mustache | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache index 165749c3cc4..7f4a79f7311 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache @@ -1,3 +1,5 @@ + + From 8260c661b3398bbd9dca7a2aaf5a9095ea7556e2 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 24 Dec 2015 12:12:09 +0100 Subject: [PATCH 42/47] Fix AndroidManifest xml schema [android-volley] --- .../src/main/resources/android-volley/manifest.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache b/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache index 7f4a79f7311..6b549476ce2 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/manifest.mustache @@ -1,4 +1,4 @@ - + From 2613e597ddcf412159dccc16cb019224ccbb61ac Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 24 Dec 2015 19:41:46 +0100 Subject: [PATCH 43/47] Added petstore sample [android-volley] --- bin/android-volley-petstore.sh | 6 +- .../petstore/android-volley/build.gradle | 91 +++ .../src/main/AndroidManifest.xml | 5 + .../java/io/swagger/client/ApiException.java | 29 + .../java/io/swagger/client/ApiInvoker.java | 440 ++++++++++++ .../main/java/io/swagger/client/JsonUtil.java | 87 +++ .../src/main/java/io/swagger/client/Pair.java | 38 + .../java/io/swagger/client/Responses.java | 53 ++ .../java/io/swagger/client/api/PetApi.java | 647 ++++++++++++++++++ .../java/io/swagger/client/api/StoreApi.java | 339 +++++++++ .../java/io/swagger/client/api/UserApi.java | 610 +++++++++++++++++ .../io/swagger/client/auth/ApiKeyAuth.java | 58 ++ .../swagger/client/auth/Authentication.java | 11 + .../io/swagger/client/model/Category.java | 54 ++ .../java/io/swagger/client/model/Order.java | 115 ++++ .../java/io/swagger/client/model/Pet.java | 117 ++++ .../java/io/swagger/client/model/Tag.java | 54 ++ .../java/io/swagger/client/model/User.java | 139 ++++ .../swagger/client/request/DeleteRequest.java | 86 +++ .../io/swagger/client/request/GetRequest.java | 39 ++ .../swagger/client/request/PatchRequest.java | 86 +++ 21 files changed, 3100 insertions(+), 4 deletions(-) create mode 100644 bin/samples/client/petstore/android-volley/build.gradle create mode 100644 bin/samples/client/petstore/android-volley/src/main/AndroidManifest.xml create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java diff --git a/bin/android-volley-petstore.sh b/bin/android-volley-petstore.sh index e1def487022..f8ba6753976 100644 --- a/bin/android-volley-petstore.sh +++ b/bin/android-volley-petstore.sh @@ -26,8 +26,6 @@ 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/android-java -i ../modules/swagger-codegen/src/test/resources/2_0/petstore.json -l android -o samples/client/petstore/android-java" +ags="$@ generate -t ../modules/swagger-codegen/src/main/resources/android-volley -i ../modules/swagger-codegen/src/test/resources/2_0/petstore.json -l android-volley -o samples/client/petstore/android-volley" -java $JAVA_OPTS -jar $executable $ags - -ping 127.0.0.1 -n 10 > nul \ No newline at end of file +java $JAVA_OPTS -jar $executable $ags \ No newline at end of file diff --git a/bin/samples/client/petstore/android-volley/build.gradle b/bin/samples/client/petstore/android-volley/build.gradle new file mode 100644 index 00000000000..36b8652f535 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/build.gradle @@ -0,0 +1,91 @@ + +group = 'io.swagger' +project.version = '1.0.0' + + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.2.2' + + classpath 'com.github.dcendents:android-maven-plugin:1.2' + + } +} + +allprojects { + repositories { + jcenter() + } +} + + +apply plugin: 'com.android.library' + +apply plugin: 'com.github.dcendents.android-maven' + + +android { + compileSdkVersion 22 + buildToolsVersion '22.0.0' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } +} + + +ext { + swagger_annotations_version = "1.5.0" + gson_version = "2.3.1" + httpclient_version = "4.3.3" + junit_version = "4.8.1" +} + +dependencies { + compile "io.swagger:swagger-annotations:$swagger_annotations_version" + compile "com.google.code.gson:gson:$gson_version" + compile "org.apache.httpcomponents:httpcore:$httpclient_version" + compile "org.apache.httpcomponents:httpmime:$httpclient_version" + testCompile "junit:junit:$junit_version" +} + +afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDir + task.destinationDir = project.file("${project.buildDir}/outputs/jar") + task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } +} + + +task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' +} + +artifacts { + archives sourcesJar +} + diff --git a/bin/samples/client/petstore/android-volley/src/main/AndroidManifest.xml b/bin/samples/client/petstore/android-volley/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..29c1d7cad36 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java new file mode 100644 index 00000000000..31bc8a0978a --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java @@ -0,0 +1,29 @@ +package io.swagger.client; + +public class ApiException extends Exception { + int code = 0; + String message = null; + + public ApiException() {} + + public ApiException(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} \ No newline at end of file diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java new file mode 100644 index 00000000000..5aa102b2bb0 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java @@ -0,0 +1,440 @@ +package io.swagger.client; + +import android.content.Context; + +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.toolbox.Volley; +import com.google.gson.JsonParseException; + +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; + +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; + +import io.swagger.client.auth.Authentication; +import io.swagger.client.auth.ApiKeyAuth; +import io.swagger.client.auth.HttpBasicAuth; +import io.swagger.client.request.GetRequest; +import io.swagger.client.request.PostRequest; +import io.swagger.client.request.PutRequest; +import io.swagger.client.request.DeleteRequest; +import io.swagger.client.request.PatchRequest; + +public class ApiInvoker { + private static ApiInvoker INSTANCE; + private Map defaultHeaderMap = new HashMap(); + + private Context context; + private RequestQueue mRequestQueue; + + private Map authentications; + + /** Content type "text/plain" with UTF-8 encoding. */ + public static final ContentType TEXT_PLAIN_UTF8 = ContentType.create("text/plain", Consts.UTF_8); + + /** + * ISO 8601 date time format. + * @see https://en.wikipedia.org/wiki/ISO_8601 + */ + public static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + + /** + * ISO 8601 date format. + * @see https://en.wikipedia.org/wiki/ISO_8601 + */ + public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + + static { + // Use UTC as the default time zone. + DATE_TIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); + DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + public static void setUserAgent(String userAgent) { + INSTANCE.addDefaultHeader("User-Agent", userAgent); + } + + public static Date parseDateTime(String str) { + try { + return DATE_TIME_FORMAT.parse(str); + } catch (java.text.ParseException e) { + throw new RuntimeException(e); + } + } + + public static Date parseDate(String str) { + try { + return DATE_FORMAT.parse(str); + } catch (java.text.ParseException e) { + throw new RuntimeException(e); + } + } + + public static String formatDateTime(Date datetime) { + return DATE_TIME_FORMAT.format(datetime); + } + + public static String formatDate(Date date) { + return DATE_FORMAT.format(date); + } + + public static String parameterToString(Object param) { + if (param == null) { + return ""; + } else if (param instanceof Date) { + return formatDateTime((Date) param); + } else if (param instanceof Collection) { + StringBuilder b = new StringBuilder(); + for(Object o : (Collection)param) { + if(b.length() > 0) { + b.append(","); + } + b.append(String.valueOf(o)); + } + return b.toString(); + } else { + return String.valueOf(param); + } + } + + /* + Format to {@code Pair} objects. + */ + public static List parameterToPairs(String collectionFormat, String name, Object value){ + List params = new ArrayList(); + + // preconditions + if (name == null || name.isEmpty() || value == null) return params; + + Collection valueCollection = null; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + params.add(new Pair(name, parameterToString(value))); + return params; + } + + if (valueCollection.isEmpty()){ + return params; + } + + // get the collection format + collectionFormat = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat); // default: csv + + // create the params based on the collection format + if (collectionFormat.equals("multi")) { + for (Object item : valueCollection) { + params.add(new Pair(name, parameterToString(item))); + } + + return params; + } + + String delimiter = ","; + + if (collectionFormat.equals("csv")) { + delimiter = ","; + } else if (collectionFormat.equals("ssv")) { + delimiter = " "; + } else if (collectionFormat.equals("tsv")) { + delimiter = "\t"; + } else if (collectionFormat.equals("pipes")) { + delimiter = "|"; + } + + StringBuilder sb = new StringBuilder() ; + for (Object item : valueCollection) { + sb.append(delimiter); + sb.append(parameterToString(item)); + } + + params.add(new Pair(name, sb.substring(1))); + + return params; + } + + public static void initializeInstance(Context context) { + INSTANCE = new ApiInvoker(context); + setUserAgent("Android-Volley-Swagger"); + + // Setup authentications (key: authentication name, value: authentication). + INSTANCE.authentications = new HashMap(); + + + + + + INSTANCE.authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + + + + // Prevent the authentications from being modified. + INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); + } + private ApiInvoker(Context context) { + this.context = context; + initConnectionManager(); + } + + public ApiInvoker() { + initConnectionManager(); + } + + public static ApiInvoker getInstance() { + return INSTANCE; + } + + public void addDefaultHeader(String key, String value) { + defaultHeaderMap.put(key, value); + } + + public String escapeString(String str) { + return str; + } + + public static Object deserialize(String json, String containerType, Class cls) throws ApiException { + try{ + if("list".equalsIgnoreCase(containerType) || "array".equalsIgnoreCase(containerType)) { + return JsonUtil.deserializeToList(json, cls); + } + else if(String.class.equals(cls)) { + if(json != null && json.startsWith("\"") && json.endsWith("\"") && json.length() > 1) + return json.substring(1, json.length() - 1); + else + return json; + } + else { + return JsonUtil.deserializeToObject(json, cls); + } + } + catch (JsonParseException e) { + throw new ApiException(500, e.getMessage()); + } + } + + public static String serialize(Object obj) throws ApiException { + try { + if (obj != null) + return JsonUtil.serialize(obj); + else + return null; + } + catch (Exception e) { + throw new ApiException(500, e.getMessage()); + } + } + + /** + * Get authentications (key: authentication name, value: authentication). + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + /** + * Helper method to set username for the first HTTP basic authentication. + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set API key value for the first API key authentication. + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Update query and header parameters based on authentication settings. + * + * @param authNames The authentications to apply + */ + private void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams) { + for (String authName : authNames) { + Authentication auth = authentications.get(authName); + if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); + auth.applyToParams(queryParams, headerParams); + } + } + + public void invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { + StringBuilder b = new StringBuilder(); + b.append("?"); + + updateParamsForAuth(authNames, queryParams, headerParams); + + if (queryParams != null){ + for (Pair queryParam : queryParams){ + if (!queryParam.getName().isEmpty()) { + b.append(escapeString(queryParam.getName())); + b.append("="); + b.append(escapeString(queryParam.getValue())); + b.append("&"); + } + } + } + + String querystring = b.substring(0, b.length() - 1); + String url = host + path + querystring; + + HashMap headers = new HashMap(); + + for(String key : headerParams.keySet()) { + headers.put(key, headerParams.get(key)); + } + + for(String key : defaultHeaderMap.keySet()) { + if(!headerParams.containsKey(key)) { + headers.put(key, defaultHeaderMap.get(key)); + } + } + headers.put("Accept", "application/json"); + + // URL encoded string from form parameters + String formParamStr = null; + + // for form data + 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 + } + } + } + formParamStr = formParamBuilder.toString(); + } + + if ("GET".equals(method)) { + GetRequest request = new GetRequest(url, headers, null, stringRequest, errorListener); + mRequestQueue.add(request); + } + else if ("POST".equals(method)) { + PostRequest request = null; + if (formParamStr != null) { + request = new PostRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PostRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); + } + else if ("PUT".equals(method)) { + PutRequest request = null; + if (formParamStr != null) { + request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PutRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); + } + else if ("DELETE".equals(method)) { + DeleteRequest request = null; + if (formParamStr != null) { + request = new DeleteRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new DeleteRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); + } + else if ("PATCH".equals(method)) { + PatchRequest request = null; + if (formParamStr != null) { + request = new PatchRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); + } else if (body != null) { + if (body instanceof HttpEntity) { + request = new PatchRequest(url, headers, null, (HttpEntity) body, stringRequest, errorListener); + } else { + request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); + } + } + if(request != null) mRequestQueue.add(request); + } + } + + private void initConnectionManager() { + mRequestQueue = Volley.newRequestQueue(context); + } +} diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java new file mode 100644 index 00000000000..5aa10d3ea82 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java @@ -0,0 +1,87 @@ +package io.swagger.client; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; +import java.util.List; +import io.swagger.client.model.*; + +public class JsonUtil { + public static GsonBuilder gsonBuilder; + + static { + gsonBuilder = new GsonBuilder(); + gsonBuilder.serializeNulls(); + gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + } + + public static Gson getGson() { + return gsonBuilder.create(); + } + + public static String serialize(Object obj){ + return getGson().toJson(obj); + } + + public static T deserializeToList(String jsonString, Class cls){ + return getGson().fromJson(jsonString, getListTypeForDeserialization(cls)); + } + + public static T deserializeToObject(String jsonString, Class cls){ + return getGson().fromJson(jsonString, getTypeForDeserialization(cls)); + } + + public static Type getListTypeForDeserialization(Class cls) { + String className = cls.getSimpleName(); + + if ("User".equalsIgnoreCase(className)) { + return new TypeToken>(){}.getType(); + } + + if ("Category".equalsIgnoreCase(className)) { + return new TypeToken>(){}.getType(); + } + + if ("Pet".equalsIgnoreCase(className)) { + return new TypeToken>(){}.getType(); + } + + if ("Tag".equalsIgnoreCase(className)) { + return new TypeToken>(){}.getType(); + } + + if ("Order".equalsIgnoreCase(className)) { + return new TypeToken>(){}.getType(); + } + + return new TypeToken>(){}.getType(); + } + + public static Type getTypeForDeserialization(Class cls) { + String className = cls.getSimpleName(); + + if ("User".equalsIgnoreCase(className)) { + return new TypeToken(){}.getType(); + } + + if ("Category".equalsIgnoreCase(className)) { + return new TypeToken(){}.getType(); + } + + if ("Pet".equalsIgnoreCase(className)) { + return new TypeToken(){}.getType(); + } + + if ("Tag".equalsIgnoreCase(className)) { + return new TypeToken(){}.getType(); + } + + if ("Order".equalsIgnoreCase(className)) { + return new TypeToken(){}.getType(); + } + + return new TypeToken(){}.getType(); + } + +}; diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java new file mode 100644 index 00000000000..2710fb5a99b --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java @@ -0,0 +1,38 @@ +package io.swagger.client; + +public class Pair { + private String name = ""; + private String value = ""; + + public Pair(String name, String value) { + setName(name); + setValue(value); + } + + private void setName(String name) { + if (!isValidString(name)) return; + + this.name = name; + } + + private void setValue(String value) { + if (!isValidString(value)) return; + + this.value = value; + } + + public String getName() { + return this.name; + } + + public String getValue() { + return this.value; + } + + private boolean isValidString(String arg) { + if (arg == null) return false; + if (arg.trim().isEmpty()) return false; + + return true; + } +} diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java new file mode 100644 index 00000000000..c0de417b616 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java @@ -0,0 +1,53 @@ +package io.swagger.client; + +import java.util.List; +import io.swagger.client.model.*; + +public class Responses { + + + public static interface UserResponse { + public void onResponse(User user); + } + public static interface UserListResponse { + public void onResponse(List userList); + } + + + + public static interface CategoryResponse { + public void onResponse(Category category); + } + public static interface CategoryListResponse { + public void onResponse(List categoryList); + } + + + + public static interface PetResponse { + public void onResponse(Pet pet); + } + public static interface PetListResponse { + public void onResponse(List petList); + } + + + + public static interface TagResponse { + public void onResponse(Tag tag); + } + public static interface TagListResponse { + public void onResponse(List tagList); + } + + + + public static interface OrderResponse { + public void onResponse(Order order); + } + public static interface OrderListResponse { + public void onResponse(List orderList); + } + + +} \ No newline at end of file diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java new file mode 100644 index 00000000000..927c96c15b0 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java @@ -0,0 +1,647 @@ +package io.swagger.client.api; + +import io.swagger.client.Responses; +import io.swagger.client.ApiInvoker; +import io.swagger.client.ApiException; +import io.swagger.client.Pair; + +import io.swagger.client.model.*; + +import java.util.*; + +import com.android.volley.Response; +import com.android.volley.VolleyError; + +import io.swagger.client.model.Pet; +import java.io.File; + + +import org.apache.http.HttpEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; + +import java.util.Map; +import java.util.HashMap; +import java.io.File; + + +public class PetApi { + String basePath = "http://petstore.swagger.io/v2"; + ApiInvoker apiInvoker = ApiInvoker.getInstance(); + + public void addHeader(String key, String value) { + getInvoker().addDefaultHeader(key, value); + } + + public ApiInvoker getInvoker() { + return apiInvoker; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + public String getBasePath() { + return basePath; + } + + + /** + * Update an existing pet + * + * @param body Pet object that needs to be added to the store + * @return void + */ + public void updatePet (Pet body, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + + // create path and map variables + String path = "/pet".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + "application/json","application/xml" + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "PUT", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Add a new pet to the store + * + * @param body Pet object that needs to be added to the store + * @return void + */ + public void addPet (Pet body, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + + // create path and map variables + String path = "/pet".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + "application/json","application/xml" + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * 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 List + */ + public void findPetsByStatus (List status, final Responses.PetListResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + + // create path and map variables + String path = "/pet/findByStatus".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + queryParams.addAll(ApiInvoker.parameterToPairs("multi", "status", status)); + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((List) ApiInvoker.deserialize(response, "array", Pet.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * 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 List + */ + public void findPetsByTags (List tags, final Responses.PetListResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + + // create path and map variables + String path = "/pet/findByTags".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + queryParams.addAll(ApiInvoker.parameterToPairs("multi", "tags", tags)); + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((List) ApiInvoker.deserialize(response, "array", Pet.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Find pet by ID + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return Pet + */ + public void getPetById (Long petId, final Responses.PetResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'petId' is set + if (petId == null) { + VolleyError error = new VolleyError("Missing the required parameter 'petId' when calling getPetById", + new ApiException(400, "Missing the required parameter 'petId' when calling getPetById")); + } + + + // create path and map variables + String path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}", apiInvoker.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "api_key" }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((Pet) ApiInvoker.deserialize(response, "", Pet.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Updates a pet in the store with form data + * + * @param petId ID of pet that needs to be updated + * @param name Updated name of the pet + * @param status Updated status of the pet + * @return void + */ + public void updatePetWithForm (String petId, String name, String status, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'petId' is set + if (petId == null) { + VolleyError error = new VolleyError("Missing the required parameter 'petId' when calling updatePetWithForm", + new ApiException(400, "Missing the required parameter 'petId' when calling updatePetWithForm")); + } + + + // create path and map variables + String path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}", apiInvoker.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + "application/x-www-form-urlencoded" + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + if (name != null) { + builder.addTextBody("name", ApiInvoker.parameterToString(name), ApiInvoker.TEXT_PLAIN_UTF8); + } + + if (status != null) { + builder.addTextBody("status", ApiInvoker.parameterToString(status), ApiInvoker.TEXT_PLAIN_UTF8); + } + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + formParams.put("name", ApiInvoker.parameterToString(name)); + formParams.put("status", ApiInvoker.parameterToString(status)); + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Deletes a pet + * + * @param petId Pet id to delete + * @param apiKey + * @return void + */ + public void deletePet (Long petId, String apiKey, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'petId' is set + if (petId == null) { + VolleyError error = new VolleyError("Missing the required parameter 'petId' when calling deletePet", + new ApiException(400, "Missing the required parameter 'petId' when calling deletePet")); + } + + + // create path and map variables + String path = "/pet/{petId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}", apiInvoker.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + headerParams.put("api_key", ApiInvoker.parameterToString(apiKey)); + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * uploads an image + * + * @param petId ID of pet to update + * @param additionalMetadata Additional data to pass to server + * @param file file to upload + * @return void + */ + public void uploadFile (Long petId, String additionalMetadata, File file, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'petId' is set + if (petId == null) { + VolleyError error = new VolleyError("Missing the required parameter 'petId' when calling uploadFile", + new ApiException(400, "Missing the required parameter 'petId' when calling uploadFile")); + } + + + // create path and map variables + String path = "/pet/{petId}/uploadImage".replaceAll("\\{format\\}","json").replaceAll("\\{" + "petId" + "\\}", apiInvoker.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + "multipart/form-data" + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + if (additionalMetadata != null) { + builder.addTextBody("additionalMetadata", ApiInvoker.parameterToString(additionalMetadata), ApiInvoker.TEXT_PLAIN_UTF8); + } + + if (file != null) { + builder.addBinaryBody("file", file); + } + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + formParams.put("additionalMetadata", ApiInvoker.parameterToString(additionalMetadata)); + + + } + + String[] authNames = new String[] { "petstore_auth" }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + +} + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java new file mode 100644 index 00000000000..5a74a4ddad3 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java @@ -0,0 +1,339 @@ +package io.swagger.client.api; + +import io.swagger.client.Responses; +import io.swagger.client.ApiInvoker; +import io.swagger.client.ApiException; +import io.swagger.client.Pair; + +import io.swagger.client.model.*; + +import java.util.*; + +import com.android.volley.Response; +import com.android.volley.VolleyError; + +import java.util.Map; +import io.swagger.client.model.Order; + + +import org.apache.http.HttpEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; + +import java.util.Map; +import java.util.HashMap; +import java.io.File; + + +public class StoreApi { + String basePath = "http://petstore.swagger.io/v2"; + ApiInvoker apiInvoker = ApiInvoker.getInstance(); + + public void addHeader(String key, String value) { + getInvoker().addDefaultHeader(key, value); + } + + public ApiInvoker getInvoker() { + return apiInvoker; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + public String getBasePath() { + return basePath; + } + + + /** + * Returns pet inventories by status + * Returns a map of status codes to quantities + * @return Map + */ + public void getInventory (final Responses.MapResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + + // create path and map variables + String path = "/store/inventory".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { "api_key" }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((Map) ApiInvoker.deserialize(response, "map", Map.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Place an order for a pet + * + * @param body order placed for purchasing the pet + * @return Order + */ + public void placeOrder (Order body, final Responses.OrderResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + + // create path and map variables + String path = "/store/order".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((Order) ApiInvoker.deserialize(response, "", Order.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param orderId ID of pet that needs to be fetched + * @return Order + */ + public void getOrderById (String orderId, final Responses.OrderResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'orderId' is set + if (orderId == null) { + VolleyError error = new VolleyError("Missing the required parameter 'orderId' when calling getOrderById", + new ApiException(400, "Missing the required parameter 'orderId' when calling getOrderById")); + } + + + // create path and map variables + String path = "/store/order/{orderId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "orderId" + "\\}", apiInvoker.escapeString(orderId.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((Order) ApiInvoker.deserialize(response, "", Order.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param orderId ID of the order that needs to be deleted + * @return void + */ + public void deleteOrder (String orderId, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'orderId' is set + if (orderId == null) { + VolleyError error = new VolleyError("Missing the required parameter 'orderId' when calling deleteOrder", + new ApiException(400, "Missing the required parameter 'orderId' when calling deleteOrder")); + } + + + // create path and map variables + String path = "/store/order/{orderId}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "orderId" + "\\}", apiInvoker.escapeString(orderId.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + +} + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java new file mode 100644 index 00000000000..14351e3fd0c --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java @@ -0,0 +1,610 @@ +package io.swagger.client.api; + +import io.swagger.client.Responses; +import io.swagger.client.ApiInvoker; +import io.swagger.client.ApiException; +import io.swagger.client.Pair; + +import io.swagger.client.model.*; + +import java.util.*; + +import com.android.volley.Response; +import com.android.volley.VolleyError; + +import io.swagger.client.model.User; +import java.util.*; + + +import org.apache.http.HttpEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; + +import java.util.Map; +import java.util.HashMap; +import java.io.File; + + +public class UserApi { + String basePath = "http://petstore.swagger.io/v2"; + ApiInvoker apiInvoker = ApiInvoker.getInstance(); + + public void addHeader(String key, String value) { + getInvoker().addDefaultHeader(key, value); + } + + public ApiInvoker getInvoker() { + return apiInvoker; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + public String getBasePath() { + return basePath; + } + + + /** + * Create user + * This can only be done by the logged in user. + * @param body Created user object + * @return void + */ + public void createUser (User body, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + + // create path and map variables + String path = "/user".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Creates list of users with given input array + * + * @param body List of user object + * @return void + */ + public void createUsersWithArrayInput (List body, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + + // create path and map variables + String path = "/user/createWithArray".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Creates list of users with given input array + * + * @param body List of user object + * @return void + */ + public void createUsersWithListInput (List body, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + + // create path and map variables + String path = "/user/createWithList".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Logs user into the system + * + * @param username The user name for login + * @param password The password for login in clear text + * @return String + */ + public void loginUser (String username, String password, final Responses.StringResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + + // create path and map variables + String path = "/user/login".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + queryParams.addAll(ApiInvoker.parameterToPairs("", "username", username)); + + queryParams.addAll(ApiInvoker.parameterToPairs("", "password", password)); + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((String) ApiInvoker.deserialize(response, "", String.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Logs out current logged in user session + * + * @return void + */ + public void logoutUser (final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + + // create path and map variables + String path = "/user/logout".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Get user by user name + * + * @param username The name that needs to be fetched. Use user1 for testing. + * @return User + */ + public void getUserByName (String username, final Responses.UserResponse responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'username' is set + if (username == null) { + VolleyError error = new VolleyError("Missing the required parameter 'username' when calling getUserByName", + new ApiException(400, "Missing the required parameter 'username' when calling getUserByName")); + } + + + // create path and map variables + String path = "/user/{username}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "username" + "\\}", apiInvoker.escapeString(username.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + try { + responseListener.onResponse((User) ApiInvoker.deserialize(response, "", User.class)); + + + + } catch (ApiException exception) { + errorListener.onErrorResponse(new VolleyError(exception)); + } + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * 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 + */ + public void updateUser (String username, User body, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = body; + + + // verify the required parameter 'username' is set + if (username == null) { + VolleyError error = new VolleyError("Missing the required parameter 'username' when calling updateUser", + new ApiException(400, "Missing the required parameter 'username' when calling updateUser")); + } + + + // create path and map variables + String path = "/user/{username}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "username" + "\\}", apiInvoker.escapeString(username.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "PUT", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + + /** + * Delete user + * This can only be done by the logged in user. + * @param username The name that needs to be deleted + * @return void + */ + public void deleteUser (String username, final Response.Listener responseListener, final Response.ErrorListener errorListener) { + Object postBody = null; + + + // verify the required parameter 'username' is set + if (username == null) { + VolleyError error = new VolleyError("Missing the required parameter 'username' when calling deleteUser", + new ApiException(400, "Missing the required parameter 'username' when calling deleteUser")); + } + + + // create path and map variables + String path = "/user/{username}".replaceAll("\\{format\\}","json").replaceAll("\\{" + "username" + "\\}", apiInvoker.escapeString(username.toString())); + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + + + + + String[] contentTypes = { + + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + + } + + String[] authNames = new String[] { }; + + try { + apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType, authNames, + new Response.Listener() { + @Override + public void onResponse(String response) { + + + responseListener.onResponse(response); + + + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + errorListener.onErrorResponse(error); + } + }); + } catch (ApiException ex) { + errorListener.onErrorResponse(new VolleyError(ex)); + } + } + +} + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java new file mode 100644 index 00000000000..0e5ca9c7c53 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -0,0 +1,58 @@ +package io.swagger.client.auth; + +import io.swagger.client.Pair; + +import java.util.Map; +import java.util.List; + +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void applyToParams(List queryParams, Map headerParams) { + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location == "query") { + queryParams.add(new Pair(paramName, value)); + } else if (location == "header") { + headerParams.put(paramName, value); + } + } +} diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java new file mode 100644 index 00000000000..98b1a6900b9 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java @@ -0,0 +1,11 @@ +package io.swagger.client.auth; + +import io.swagger.client.Pair; + +import java.util.Map; +import java.util.List; + +public interface Authentication { + /** Apply authentication settings to header and query params. */ + void applyToParams(List queryParams, Map headerParams); +} diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java new file mode 100644 index 00000000000..98e5c25c80f --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java @@ -0,0 +1,54 @@ +package io.swagger.client.model; + + + +import io.swagger.annotations.*; +import com.google.gson.annotations.SerializedName; + + + +@ApiModel(description = "") +public class Category { + + @SerializedName("id") + private Long id = null; + @SerializedName("name") + private String name = null; + + + /** + **/ + @ApiModelProperty(value = "") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Category {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" name: ").append(name).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} + + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java new file mode 100644 index 00000000000..4ef664deba2 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java @@ -0,0 +1,115 @@ +package io.swagger.client.model; + +import java.util.Date; + + +import io.swagger.annotations.*; +import com.google.gson.annotations.SerializedName; + + + +@ApiModel(description = "") +public class Order { + + @SerializedName("id") + private Long id = null; + @SerializedName("petId") + private Long petId = null; + @SerializedName("quantity") + private Integer quantity = null; + @SerializedName("shipDate") + private Date shipDate = null; + public enum StatusEnum { + placed, approved, delivered, + }; + @SerializedName("status") + private StatusEnum status = null; + @SerializedName("complete") + private Boolean complete = null; + + + /** + **/ + @ApiModelProperty(value = "") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @ApiModelProperty(value = "") + public Long getPetId() { + return petId; + } + public void setPetId(Long petId) { + this.petId = petId; + } + + + /** + **/ + @ApiModelProperty(value = "") + public Integer getQuantity() { + return quantity; + } + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + + /** + **/ + @ApiModelProperty(value = "") + public Date getShipDate() { + return shipDate; + } + public void setShipDate(Date shipDate) { + this.shipDate = shipDate; + } + + + /** + * Order Status + **/ + @ApiModelProperty(value = "Order Status") + public StatusEnum getStatus() { + return status; + } + public void setStatus(StatusEnum status) { + this.status = status; + } + + + /** + **/ + @ApiModelProperty(value = "") + public Boolean getComplete() { + return complete; + } + public void setComplete(Boolean complete) { + this.complete = complete; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Order {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" petId: ").append(petId).append("\n"); + sb.append(" quantity: ").append(quantity).append("\n"); + sb.append(" shipDate: ").append(shipDate).append("\n"); + sb.append(" status: ").append(status).append("\n"); + sb.append(" complete: ").append(complete).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} + + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java new file mode 100644 index 00000000000..cf7eb877b2a --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java @@ -0,0 +1,117 @@ +package io.swagger.client.model; + +import io.swagger.client.model.Category; +import java.util.*; +import io.swagger.client.model.Tag; + + +import io.swagger.annotations.*; +import com.google.gson.annotations.SerializedName; + + + +@ApiModel(description = "") +public class Pet { + + @SerializedName("id") + private Long id = null; + @SerializedName("category") + private Category category = null; + @SerializedName("name") + private String name = null; + @SerializedName("photoUrls") + private List photoUrls = null; + @SerializedName("tags") + private List tags = null; + public enum StatusEnum { + available, pending, sold, + }; + @SerializedName("status") + private StatusEnum status = null; + + + /** + **/ + @ApiModelProperty(value = "") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @ApiModelProperty(value = "") + public Category getCategory() { + return category; + } + public void setCategory(Category category) { + this.category = category; + } + + + /** + **/ + @ApiModelProperty(required = true, value = "") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + /** + **/ + @ApiModelProperty(required = true, value = "") + public List getPhotoUrls() { + return photoUrls; + } + public void setPhotoUrls(List photoUrls) { + this.photoUrls = photoUrls; + } + + + /** + **/ + @ApiModelProperty(value = "") + public List getTags() { + return tags; + } + public void setTags(List tags) { + this.tags = tags; + } + + + /** + * pet status in the store + **/ + @ApiModelProperty(value = "pet status in the store") + public StatusEnum getStatus() { + return status; + } + public void setStatus(StatusEnum status) { + this.status = status; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Pet {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" category: ").append(category).append("\n"); + sb.append(" name: ").append(name).append("\n"); + sb.append(" photoUrls: ").append(photoUrls).append("\n"); + sb.append(" tags: ").append(tags).append("\n"); + sb.append(" status: ").append(status).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} + + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java new file mode 100644 index 00000000000..e87a002a144 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java @@ -0,0 +1,54 @@ +package io.swagger.client.model; + + + +import io.swagger.annotations.*; +import com.google.gson.annotations.SerializedName; + + + +@ApiModel(description = "") +public class Tag { + + @SerializedName("id") + private Long id = null; + @SerializedName("name") + private String name = null; + + + /** + **/ + @ApiModelProperty(value = "") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Tag {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" name: ").append(name).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} + + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java new file mode 100644 index 00000000000..fabdab0b4e3 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java @@ -0,0 +1,139 @@ +package io.swagger.client.model; + + + +import io.swagger.annotations.*; +import com.google.gson.annotations.SerializedName; + + + +@ApiModel(description = "") +public class User { + + @SerializedName("id") + private Long id = null; + @SerializedName("username") + private String username = null; + @SerializedName("firstName") + private String firstName = null; + @SerializedName("lastName") + private String lastName = null; + @SerializedName("email") + private String email = null; + @SerializedName("password") + private String password = null; + @SerializedName("phone") + private String phone = null; + @SerializedName("userStatus") + private Integer userStatus = null; + + + /** + **/ + @ApiModelProperty(value = "") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getUsername() { + return username; + } + public void setUsername(String username) { + this.username = username; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + + + /** + **/ + @ApiModelProperty(value = "") + public String getPhone() { + return phone; + } + public void setPhone(String phone) { + this.phone = phone; + } + + + /** + * User Status + **/ + @ApiModelProperty(value = "User Status") + public Integer getUserStatus() { + return userStatus; + } + public void setUserStatus(Integer userStatus) { + this.userStatus = userStatus; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class User {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" username: ").append(username).append("\n"); + sb.append(" firstName: ").append(firstName).append("\n"); + sb.append(" lastName: ").append(lastName).append("\n"); + sb.append(" email: ").append(email).append("\n"); + sb.append(" password: ").append(password).append("\n"); + sb.append(" phone: ").append(phone).append("\n"); + sb.append(" userStatus: ").append(userStatus).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} + + diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java new file mode 100644 index 00000000000..36b0c6ad07d --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java @@ -0,0 +1,86 @@ +package io.swagger.client.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class DeleteRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public DeleteRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.DELETE, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java new file mode 100644 index 00000000000..91be40c66a2 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java @@ -0,0 +1,39 @@ +package io.swagger.client.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.Response; +import com.android.volley.toolbox.StringRequest; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class GetRequest extends StringRequest{ + Map apiHeaders; + String contentType; + + public GetRequest(String url, Map apiHeaders, String contentType, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.GET, url, listener, errorListener); + this.apiHeaders = apiHeaders; + this.contentType = contentType; + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java new file mode 100644 index 00000000000..206a745e5b2 --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java @@ -0,0 +1,86 @@ +package io.swagger.client.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class PatchRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public PatchRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.PATCH, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From 69e1eecee0f721419cebc6c33fdff0658a52d8b7 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Thu, 24 Dec 2015 19:42:03 +0100 Subject: [PATCH 44/47] Added petstore sample [android-volley] --- .../swagger/client/request/PostRequest.java | 86 +++++++++++++++++++ .../io/swagger/client/request/PutRequest.java | 86 +++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java create mode 100644 bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java new file mode 100644 index 00000000000..97d0eb16b1a --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java @@ -0,0 +1,86 @@ +package io.swagger.client.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class PostRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public PostRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.POST, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java new file mode 100644 index 00000000000..0a7b40e510e --- /dev/null +++ b/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java @@ -0,0 +1,86 @@ +package io.swagger.client.request; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; + +import org.apache.http.HttpEntity; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class PutRequest extends Request { + + HttpEntity entity; + + private final Response.Listener mListener; + + String contentType; + Map apiHeaders; + public PutRequest(String url, Map apiHeaders, String contentType, HttpEntity entity, Response.Listener listener, Response.ErrorListener errorListener) { + super(Method.PUT, url, errorListener); + mListener = listener; + this.entity = entity; + this.contentType = contentType; + this.apiHeaders = apiHeaders; + } + + @Override + public String getBodyContentType() { + return entity.getContentType().getValue(); + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + entity.writeTo(bos); + } + catch (IOException e) { + VolleyLog.e("IOException writing to ByteArrayOutputStream"); + } + return bos.toByteArray(); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + /* (non-Javadoc) + * @see com.android.volley.Request#getHeaders() + */ + @Override + public Map getHeaders() throws AuthFailureError { + Map headers = super.getHeaders(); + if (headers == null || headers.equals(Collections.emptyMap())) { + headers = new HashMap(); + } + if (apiHeaders != null && !apiHeaders.equals(Collections.emptyMap())) { + headers.putAll(apiHeaders); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + + return headers; + } +} \ No newline at end of file From 58cb5716cb871b087ae3f928d47c051c1345a364 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sat, 26 Dec 2015 11:51:53 +0100 Subject: [PATCH 45/47] move android-volley generated sample --- bin/android-volley-petstore.sh | 2 +- .../client/petstore/android-volley/build.gradle | 0 .../client/petstore/android-volley/src/main/AndroidManifest.xml | 0 .../src/main/java/io/swagger/client/ApiException.java | 0 .../src/main/java/io/swagger/client/ApiInvoker.java | 0 .../src/main/java/io/swagger/client/JsonUtil.java | 0 .../android-volley/src/main/java/io/swagger/client/Pair.java | 0 .../src/main/java/io/swagger/client/Responses.java | 0 .../src/main/java/io/swagger/client/api/PetApi.java | 0 .../src/main/java/io/swagger/client/api/StoreApi.java | 0 .../src/main/java/io/swagger/client/api/UserApi.java | 0 .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 0 .../src/main/java/io/swagger/client/auth/Authentication.java | 0 .../src/main/java/io/swagger/client/model/Category.java | 0 .../src/main/java/io/swagger/client/model/Order.java | 0 .../src/main/java/io/swagger/client/model/Pet.java | 0 .../src/main/java/io/swagger/client/model/Tag.java | 0 .../src/main/java/io/swagger/client/model/User.java | 0 .../src/main/java/io/swagger/client/request/DeleteRequest.java | 0 .../src/main/java/io/swagger/client/request/GetRequest.java | 0 .../src/main/java/io/swagger/client/request/PatchRequest.java | 0 .../src/main/java/io/swagger/client/request/PostRequest.java | 0 .../src/main/java/io/swagger/client/request/PutRequest.java | 0 23 files changed, 1 insertion(+), 1 deletion(-) rename {bin/samples => samples}/client/petstore/android-volley/build.gradle (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/AndroidManifest.xml (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java (100%) rename {bin/samples => samples}/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java (100%) diff --git a/bin/android-volley-petstore.sh b/bin/android-volley-petstore.sh index f8ba6753976..ab6ab7d9f08 100644 --- a/bin/android-volley-petstore.sh +++ b/bin/android-volley-petstore.sh @@ -17,7 +17,7 @@ if [ ! -d "${APP_DIR}" ]; then APP_DIR=`cd "${APP_DIR}"; pwd` fi -executable="../modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" +executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" if [ ! -f "$executable" ] then diff --git a/bin/samples/client/petstore/android-volley/build.gradle b/samples/client/petstore/android-volley/build.gradle similarity index 100% rename from bin/samples/client/petstore/android-volley/build.gradle rename to samples/client/petstore/android-volley/build.gradle diff --git a/bin/samples/client/petstore/android-volley/src/main/AndroidManifest.xml b/samples/client/petstore/android-volley/src/main/AndroidManifest.xml similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/AndroidManifest.xml rename to samples/client/petstore/android-volley/src/main/AndroidManifest.xml diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiException.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/ApiInvoker.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/JsonUtil.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/Pair.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/Responses.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/PetApi.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/StoreApi.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/api/UserApi.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/ApiKeyAuth.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/auth/Authentication.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Category.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Order.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Pet.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/Tag.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/model/User.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/DeleteRequest.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/GetRequest.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PatchRequest.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PostRequest.java diff --git a/bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java b/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java similarity index 100% rename from bin/samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java rename to samples/client/petstore/android-volley/src/main/java/io/swagger/client/request/PutRequest.java From 29c05b5d65946d960f4e46fa4abcec2412a6c8ab Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sun, 27 Dec 2015 12:36:19 +0100 Subject: [PATCH 46/47] Added string responses [android-volley] --- .../src/main/resources/android-volley/api.mustache | 2 +- .../src/main/resources/android-volley/responses.mustache | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache index c1fbacf7e23..ccd12fd67c5 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/api.mustache @@ -50,7 +50,7 @@ public class {{classname}} { {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} */ - public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}, {{/hasMore}}{{/allParams}}final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Response.Listener{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { + public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}, {{/hasMore}}{{/allParams}}final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Responses.StringResponse{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} diff --git a/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache b/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache index bb4d463e2c5..7cb955f7239 100644 --- a/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache +++ b/modules/swagger-codegen/src/main/resources/android-volley/responses.mustache @@ -14,4 +14,11 @@ public class Responses { } {{/model}} {{/models}} + public static interface StringResponse { + public void onResponse(String response); + } + + public static interface StringListResponse { + public void onResponse(List stringList); + } } \ No newline at end of file From b41efdab5ff6cedad9c3dcdeb2c578f90f972d8f Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Sun, 27 Dec 2015 13:06:17 +0100 Subject: [PATCH 47/47] updated android-volley build.gradle --- .../languages/AndroidVolleyClientCodegen.java | 2 ++ .../AndroidVolleyClientOptionsTest.java | 18 +++++++++--------- .../AndroidVolleyClientOptionsProvider.java | 2 ++ .../petstore/android-volley/build.gradle | 8 +++++--- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java index e595fb6a223..9eeb9618b48 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AndroidVolleyClientCodegen.java @@ -62,6 +62,8 @@ public class AndroidVolleyClientCodegen extends DefaultCodegen implements Codege instantiationTypes.put("array", "ArrayList"); instantiationTypes.put("map", "HashMap"); + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, "groupId for use in the generated build.gradle and pom.xml")); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, "artifactId for use in the generated build.gradle and pom.xml")); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java index 36946390fde..58711d9a3f8 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/androidvolley/AndroidVolleyClientOptionsTest.java @@ -25,23 +25,23 @@ public class AndroidVolleyClientOptionsTest extends AbstractOptionsTest { @Override protected void setExpectations() { new Expectations(clientCodegen) {{ - clientCodegen.setModelPackage(AndroidClientOptionsProvider.MODEL_PACKAGE_VALUE); + clientCodegen.setModelPackage(AndroidVolleyClientOptionsProvider.MODEL_PACKAGE_VALUE); times = 1; - clientCodegen.setApiPackage(AndroidClientOptionsProvider.API_PACKAGE_VALUE); + clientCodegen.setApiPackage(AndroidVolleyClientOptionsProvider.API_PACKAGE_VALUE); times = 1; - clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(AndroidClientOptionsProvider.SORT_PARAMS_VALUE)); + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(AndroidVolleyClientOptionsProvider.SORT_PARAMS_VALUE)); times = 1; - clientCodegen.setInvokerPackage(AndroidClientOptionsProvider.INVOKER_PACKAGE_VALUE); + clientCodegen.setInvokerPackage(AndroidVolleyClientOptionsProvider.INVOKER_PACKAGE_VALUE); times = 1; - clientCodegen.setGroupId(AndroidClientOptionsProvider.GROUP_ID_VALUE); + clientCodegen.setGroupId(AndroidVolleyClientOptionsProvider.GROUP_ID_VALUE); times = 1; - clientCodegen.setArtifactId(AndroidClientOptionsProvider.ARTIFACT_ID_VALUE); + clientCodegen.setArtifactId(AndroidVolleyClientOptionsProvider.ARTIFACT_ID_VALUE); times = 1; - clientCodegen.setArtifactVersion(AndroidClientOptionsProvider.ARTIFACT_VERSION_VALUE); + clientCodegen.setArtifactVersion(AndroidVolleyClientOptionsProvider.ARTIFACT_VERSION_VALUE); times = 1; - clientCodegen.setSourceFolder(AndroidClientOptionsProvider.SOURCE_FOLDER_VALUE); + clientCodegen.setSourceFolder(AndroidVolleyClientOptionsProvider.SOURCE_FOLDER_VALUE); times = 1; - clientCodegen.setUseAndroidMavenGradlePlugin(Boolean.valueOf(AndroidClientOptionsProvider.ANDROID_MAVEN_GRADLE_PLUGIN_VALUE)); + clientCodegen.setUseAndroidMavenGradlePlugin(Boolean.valueOf(AndroidVolleyClientOptionsProvider.ANDROID_MAVEN_GRADLE_PLUGIN_VALUE)); times = 1; }}; } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java index 549d56b42fd..e67948935cc 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AndroidVolleyClientOptionsProvider.java @@ -13,6 +13,7 @@ public class AndroidVolleyClientOptionsProvider implements OptionsProvider { public static final String API_PACKAGE_VALUE = "apiPackage"; public static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String GROUP_ID_VALUE = "io.swagger.test"; public static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String SOURCE_FOLDER_VALUE = "src/main/java/test"; @@ -29,6 +30,7 @@ public class AndroidVolleyClientOptionsProvider implements OptionsProvider { return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) diff --git a/samples/client/petstore/android-volley/build.gradle b/samples/client/petstore/android-volley/build.gradle index 36b8652f535..13edc8fdab2 100644 --- a/samples/client/petstore/android-volley/build.gradle +++ b/samples/client/petstore/android-volley/build.gradle @@ -28,11 +28,11 @@ apply plugin: 'com.github.dcendents.android-maven' android { - compileSdkVersion 22 - buildToolsVersion '22.0.0' + compileSdkVersion 23 + buildToolsVersion '23.0.2' defaultConfig { minSdkVersion 14 - targetSdkVersion 22 + targetSdkVersion 23 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 @@ -57,6 +57,7 @@ ext { gson_version = "2.3.1" httpclient_version = "4.3.3" junit_version = "4.8.1" + volley_version = "1.0.19" } dependencies { @@ -64,6 +65,7 @@ dependencies { compile "com.google.code.gson:gson:$gson_version" compile "org.apache.httpcomponents:httpcore:$httpclient_version" compile "org.apache.httpcomponents:httpmime:$httpclient_version" + compile "com.mcxiaoke.volley:library:${volley_version}@aar" testCompile "junit:junit:$junit_version" }