Java and Android template changes to accommodate query params defined by the collection-format.

This commit is contained in:
Raghav Sidhanti
2015-06-19 14:06:25 -07:00
parent 6ad3a717fe
commit 7a9a41fe01
30 changed files with 556 additions and 120 deletions

View File

@@ -0,0 +1,38 @@
package {{invokerPackage}};
public class QueryParam {
private String name = "";
private String value = "";
public QueryParam(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;
}
}

View File

@@ -2,6 +2,7 @@ package {{package}};
import {{invokerPackage}}.ApiException;
import {{invokerPackage}}.ApiInvoker;
import {{invokerPackage}}.QueryParam;
import {{modelPackage}}.*;
@@ -58,17 +59,18 @@ public class {{classname}} {
String path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{paramName}}" + "\\}", apiInvoker.escapeString({{{paramName}}}.toString())){{/pathParams}};
// query params
Map<String, String> queryParams = new HashMap<String, String>();
Set<QueryParam> queryParams = new HashSet<QueryParam>();
// header params
Map<String, String> headerParams = new HashMap<String, String>();
// form params
Map<String, String> formParams = new HashMap<String, String>();
{{#queryParams}}if ({{paramName}} != null)
queryParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
{{#queryParams}}
queryParams.addAll(ApiInvoker.parameterToQueryParams("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}));
{{/queryParams}}
{{#headerParams}}headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
{{#headerParams}}
headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
{{/headerParams}}
String[] contentTypes = {

View File

@@ -23,6 +23,8 @@ import java.util.Collection;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@@ -132,6 +134,61 @@ public class ApiInvoker {
}
}
/*
Format to {@code QueryParam} objects.
*/
public Set<QueryParam> parameterToQueryParams(String collectionFormat, String name, Object value){
Set<QueryParam> params = new HashSet<QueryParam>();
// preconditions
if (name == null || name.isEmpty() || value == null) return params;
Collection<String> valueCollection = null;
if (value instanceof Collection) {
valueCollection = (Collection<String>) value;
}
if (valueCollection == null) {
params.add(new QueryParam(name, String.valueOf(value)));
return params;
} else if (valueCollection.isEmpty()) {
return params;
}
collectionFormat = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat); // default: csv
if (collectionFormat.equals("csv")) {
params.add(new QueryParam(name, parameterToString(value)));
} else if (collectionFormat.equals("multi")) {
for (String item : valueCollection) {
params.add(new QueryParam(name, item));
}
} else if (collectionFormat.equals("ssv")) {
StringBuilder sb = new StringBuilder() ;
for (String item : valueCollection) {
sb.append(" ");
sb.append(item);
}
params.add(new QueryParam(name, sb.substring(1)));
} else if (collectionFormat.equals("tsv")) {
StringBuilder sb = new StringBuilder() ;
for (String item : valueCollection) {
sb.append("\t");
sb.append(item);
}
params.add(new QueryParam(name, sb.substring(1)));
} else if (collectionFormat.equals("pipes")) {
StringBuilder sb = new StringBuilder() ;
for (String item : valueCollection) {
sb.append("|");
sb.append(item);
}
params.add(new QueryParam(name, sb.substring(1)));
}
return params;
}
public ApiInvoker() {
initConnectionManager();
}
@@ -184,21 +241,24 @@ public class ApiInvoker {
}
}
public String invokeAPI(String host, String path, String method, Map<String, String> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType) throws ApiException {
public String invokeAPI(String host, String path, String method, Set<QueryParam> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType) throws ApiException {
HttpClient client = getClient(host);
StringBuilder b = new StringBuilder();
for(String key : queryParams.keySet()) {
String value = queryParams.get(key);
if (value != null){
if(b.toString().length() == 0)
b.append("?");
else
b.append("?");
if (queryParams != null){
for (QueryParam queryParam : queryParams){
if (!queryParam.getName().isEmpty()) {
b.append(escapeString(queryParam.getName()));
b.append("=");
b.append(escapeString(queryParam.getValue()));
b.append("&");
b.append(escapeString(key)).append("=").append(escapeString(value));
}
}
}
String url = host + path + b.toString();
String querystring = b.substring(0, b.length() - 1);
String url = host + path + querystring;
HashMap<String, String> headers = new HashMap<String, String>();