Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
78352dd
First steps on Android Volley ApiInvoker
Shyri Nov 3, 2015
795b324
Added imports to Android Volley apiInvoker
Shyri Nov 4, 2015
a2aeb5a
Added ClientOptions android-volley
Shyri Nov 4, 2015
16bf228
Added model template android-volley
Shyri Nov 4, 2015
efac324
Added api template android-volley
Shyri Nov 4, 2015
acac1bb
Added GetRequest template android-volley
Shyri Nov 4, 2015
090839f
Added AndroidVolley ClientCodegen
Shyri Nov 4, 2015
c367989
Added jsonUtil and Pair android-volley
Shyri Nov 4, 2015
5c79c21
fixed Api returnType [android-volley]
Shyri Nov 5, 2015
e098e8f
Added PostRequest [android-volley]
Shyri Nov 5, 2015
f3ff567
added default string response to api template [android-volley]
Shyri Nov 5, 2015
980957b
fix getrequest import [android-volley]
Shyri Nov 5, 2015
c80ff7e
Added responses class
Shyri Nov 5, 2015
52ebd25
Added responses class [android-volley]
Shyri Nov 5, 2015
f5e757e
Added build.gradle and AndroidManifest [android-volley]
Shyri Nov 5, 2015
84a22c8
Added build.gradle and AndroidManifest [android-volley]
Shyri Nov 5, 2015
b9abe2b
Added apiException template [android-volley]
Shyri Nov 5, 2015
7b811ad
various api template fixes [android-volley]
Shyri Nov 5, 2015
5c9606b
fix apiInvoker template imports [android-volley]
Shyri Nov 5, 2015
b290d2d
fix responses template [android-volley]
Shyri Nov 5, 2015
93ed2e6
added android-volley to CodegenConfig
Shyri Nov 5, 2015
f5aba6d
removed faulty setuseragent [android-volley]
Shyri Nov 5, 2015
b55f880
throw volley error on body post null [android-volley]
Shyri Nov 7, 2015
cfdf2bc
fix returnContainer [android-volley]
Shyri Nov 7, 2015
2e4f6dc
Added error listeners in api template [android-volley]
Shyri Nov 8, 2015
5cfcb0b
fixed response parsing in post request template [android-volley]
Shyri Nov 8, 2015
89b4d9b
fixed requests packages and imports [android-volley]
Shyri Nov 11, 2015
e054c3c
Moved request templates [android-volley]
Shyri Nov 12, 2015
2af665a
Added ApiKeyAuth implementation [android-volley]
Shyri Nov 13, 2015
3c275f1
try catch when string response removed
Shyri Nov 26, 2015
c307202
Import corrections [android-volley]
Shyri Dec 1, 2015
9b2a04c
Added Android-Volley to readme and pom
Shyri Dec 1, 2015
b28e089
Added PUT request [android-volley]
Shyri Dec 10, 2015
a68ecf7
Added [android-volley] petstore.sh
Shyri Dec 10, 2015
cb9e4bf
Added DELETE request [android-volley]
Shyri Dec 15, 2015
a897a2f
Added PATCH request [android-volley]
Shyri Dec 16, 2015
b91e5c9
Rename request templates and fixed patch request [android-volley]
Shyri Dec 20, 2015
e9990d6
Fix API template [android-volley]
Shyri Dec 21, 2015
ea1cbda
Fix API template [android-volley]
Shyri Dec 22, 2015
602abdd
Added http basic authentication method [android-volley]
Shyri Dec 22, 2015
d162fc5
Add permissions to manifest [android-volley]
Shyri Dec 24, 2015
8260c66
Fix AndroidManifest xml schema [android-volley]
Shyri Dec 24, 2015
2613e59
Added petstore sample [android-volley]
Shyri Dec 24, 2015
69e1eec
Added petstore sample [android-volley]
Shyri Dec 24, 2015
58cb571
move android-volley generated sample
Shyri Dec 26, 2015
29c05b5
Added string responses [android-volley]
Shyri Dec 27, 2015
b41efda
updated android-volley build.gradle
Shyri Dec 27, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
31 changes: 31 additions & 0 deletions bin/android-volley-petstore.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/sh

SCRIPT="$0"

while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done

if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi

executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"

if [ ! -f "$executable" ]
then
mvn clean package
fi

# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t ../modules/swagger-codegen/src/main/resources/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
Original file line number Diff line number Diff line change
@@ -0,0 +1,299 @@
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";
protected String authPackage = "io.swagger.client.auth";

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<String>(
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<String>(
Arrays.asList(
"String",
"boolean",
"Boolean",
"Double",
"Integer",
"Long",
"Float",
"Object")
);
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"));
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) + "<String, " + getTypeDeclaration(inner) + ">";
}
return super.getTypeDeclaration(p);
}

@Override
public String getSwaggerType(Property p) {
String swaggerType = super.getSwaggerType(p);
String type = null;
if (typeMapping.containsKey(swaggerType)) {
type = typeMapping.get(swaggerType);
if (languageSpecificPrimitives.contains(type)) {
return toModelName(type);
}
} else {
type = swaggerType;
}
return toModelName(type);
}

@Override
public String 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("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"));
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("request/getrequest.mustache",
(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("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/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"));
}

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;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Pair> queryParams, Map<String, String> headerParams);
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Loading