X Tutup
Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand All @@ -33,7 +35,7 @@ public RestAnnotationHelper(ProcessingEnvironment processingEnv, Class<? extends
super(processingEnv, target);
}

public void urlVariableNamesExistInParameters(ExecutableElement element, List<String> variableNames, IsValid valid) {
public void urlVariableNamesExistInParameters(ExecutableElement element, Set<String> variableNames, IsValid valid) {

List<? extends VariableElement> parameters = element.getParameters();

Expand All @@ -53,7 +55,7 @@ public void urlVariableNamesExistInParameters(ExecutableElement element, List<St

public void urlVariableNamesExistInParametersAndHasNoOneMoreParameter(ExecutableElement element, IsValid valid) {
if (valid.isValid()) {
List<String> variableNames = extractUrlVariableNames(element);
Set<String> variableNames = extractUrlVariableNames(element);
urlVariableNamesExistInParameters(element, variableNames, valid);
if (valid.isValid()) {
List<? extends VariableElement> parameters = element.getParameters();
Expand All @@ -65,10 +67,10 @@ public void urlVariableNamesExistInParametersAndHasNoOneMoreParameter(Executable
}
}
}

public void urlVariableNamesExistInParametersAndHasOnlyOneMoreParameter(ExecutableElement element, IsValid valid) {
if (valid.isValid()) {
List<String> variableNames = extractUrlVariableNames(element);
Set<String> variableNames = extractUrlVariableNames(element);
urlVariableNamesExistInParameters(element, variableNames, valid);
if (valid.isValid()) {
List<? extends VariableElement> parameters = element.getParameters();
Expand All @@ -84,7 +86,7 @@ public void urlVariableNamesExistInParametersAndHasOnlyOneMoreParameter(Executab
/** Captures URI template variable names. */
private static final Pattern NAMES_PATTERN = Pattern.compile("\\{([^/]+?)\\}");

public List<String> extractUrlVariableNames(ExecutableElement element) {
public Set<String> extractUrlVariableNames(ExecutableElement element) {

// extract variables name from root url isn't really useful

Expand All @@ -94,7 +96,7 @@ public List<String> extractUrlVariableNames(ExecutableElement element) {
// String urlSuffix = extractAnnotationValue(element);
// String uriTemplate = urlPrefix + urlSuffix;

List<String> variableNames = new ArrayList<String>();
Set<String> variableNames = new HashSet<String>();
String uriTemplate = extractAnnotationValueParameter(element);

boolean hasValueInAnnotation = uriTemplate != null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import javax.annotation.processing.ProcessingEnvironment;
Expand All @@ -30,8 +31,9 @@
import org.androidannotations.annotations.rest.Accept;
import org.androidannotations.helper.CanonicalNameConstants;
import org.androidannotations.helper.RestAnnotationHelper;
import org.androidannotations.processing.EBeanHolder;
import org.androidannotations.processing.DecoratingElementProcessor;
import org.androidannotations.processing.EBeanHolder;

import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
Expand Down Expand Up @@ -127,13 +129,14 @@ private JVar generateHashMapVar(MethodProcessorHolder methodHolder) {
TreeMap<String, JVar> methodParams = methodHolder.getMethodParams();
JVar hashMapVar = null;

List<String> urlVariables = restAnnotationHelper.extractUrlVariableNames(element);
Set<String> urlVariables = restAnnotationHelper.extractUrlVariableNames(element);
JClass hashMapClass = codeModel.ref(HashMap.class).narrow(String.class, Object.class);
if (!urlVariables.isEmpty()) {
hashMapVar = body.decl(hashMapClass, "urlVariables", JExpr._new(hashMapClass));

for (String urlVariable : urlVariables) {
body.invoke(hashMapVar, "put").arg(urlVariable).arg(methodParams.get(urlVariable));
JVar urlValue = methodParams.get(urlVariable);
body.invoke(hashMapVar, "put").arg(urlVariable).arg(urlValue);
methodParams.remove(urlVariable);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ public interface MyService {
@Accept("application/json")
Event[] getEventsArray(String location, int year);


@Get("/events/{year}/{year}")
@Accept(MediaType.APPLICATION_JSON)
Event[][] urlWithAParameterDeclaredTwice(int year);

@Get("/events/{year}/{location}")
@Accept(MediaType.APPLICATION_JSON)
Event[][] getEventsArrayOfArrays(String location, int year);
Expand Down
X Tutup