diff --git a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/functions/ElementToQueryParameter.java b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/functions/ElementToQueryParameter.java new file mode 100644 index 0000000..f3a55e4 --- /dev/null +++ b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/functions/ElementToQueryParameter.java @@ -0,0 +1,21 @@ +package fr.vidal.oss.jax_rs_linker.functions; + +import com.google.common.base.Function; +import fr.vidal.oss.jax_rs_linker.model.QueryParameter; + +import javax.annotation.Nullable; +import javax.lang.model.element.Element; +import javax.lang.model.element.VariableElement; +import javax.ws.rs.QueryParam; + +public enum ElementToQueryParameter implements Function { + + INTO_QUERY_PARAMETER; + + @Nullable + @Override + public QueryParameter apply(Element parameterElement) { + return new QueryParameter(parameterElement.getAnnotation(QueryParam.class).value()); + } + +} diff --git a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/functions/VariableElementToQueryParameter.java b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/functions/VariableElementToQueryParameter.java deleted file mode 100644 index 871294f..0000000 --- a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/functions/VariableElementToQueryParameter.java +++ /dev/null @@ -1,23 +0,0 @@ -package fr.vidal.oss.jax_rs_linker.functions; - -import com.google.common.base.Function; -import fr.vidal.oss.jax_rs_linker.model.ClassName; -import fr.vidal.oss.jax_rs_linker.model.QueryParameter; - -import javax.annotation.Nullable; -import javax.lang.model.element.VariableElement; -import javax.ws.rs.QueryParam; - -public enum VariableElementToQueryParameter implements Function{ - - INTO_QUERY_PARAMETER; - - @Nullable - @Override - public QueryParameter apply(VariableElement parameterElement) { - return new QueryParameter( - ClassName.valueOf(parameterElement.getEnclosingElement().getEnclosingElement().getSimpleName().toString()), - parameterElement.getAnnotation(QueryParam.class).value()); - } - -} diff --git a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/model/QueryParameter.java b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/model/QueryParameter.java index 3ffd333..fb61e4d 100644 --- a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/model/QueryParameter.java +++ b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/model/QueryParameter.java @@ -6,21 +6,15 @@ public class QueryParameter { private String name; - private ClassName className; - public QueryParameter(ClassName className, String name) { + public QueryParameter(String name) { this.name = name; - this.className = className; } public String getName() { return name; } - public ClassName getClassName() { - return className; - } - @Override public boolean equals(Object obj) { if (this == obj) { @@ -30,19 +24,18 @@ public boolean equals(Object obj) { return false; } final QueryParameter other = (QueryParameter) obj; - return Objects.equal(this.className, other.className) && Objects.equal(this.name, other.name); + return Objects.equal(this.name, other.name); } @Override public int hashCode() { - return Objects.hashCode(className, name); + return Objects.hashCode(name); } @Override public String toString() { - return "QueryParameter { " + - "name='" + name + "\'" + - ", className='" + className + - "' }"; + return "QueryParameter{" + + "name='" + name + '\'' + + '}'; } } diff --git a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/parser/ElementParser.java b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/parser/ElementParser.java index e2f39ad..70bd2a1 100644 --- a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/parser/ElementParser.java +++ b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/parser/ElementParser.java @@ -10,9 +10,14 @@ import javax.annotation.processing.Messager; import javax.lang.model.element.*; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.ElementFilter; import javax.lang.model.util.Types; +import javax.ws.rs.BeanParam; import javax.ws.rs.QueryParam; import java.util.Collection; +import java.util.List; import static com.google.common.base.Optional.absent; import static com.google.common.base.Preconditions.checkArgument; @@ -20,10 +25,9 @@ import static com.google.common.collect.Lists.newArrayList; import static fr.vidal.oss.jax_rs_linker.functions.AnnotationMirrorToMethodValueEntryFunction.TO_METHOD_VALUE_ENTRIES; import static fr.vidal.oss.jax_rs_linker.functions.EntriesToStringValueFunction.TO_STRING_VALUE; -import static fr.vidal.oss.jax_rs_linker.functions.VariableElementToQueryParameter.INTO_QUERY_PARAMETER; +import static fr.vidal.oss.jax_rs_linker.functions.ElementToQueryParameter.INTO_QUERY_PARAMETER; import static fr.vidal.oss.jax_rs_linker.predicates.AnnotationMirrorByNamePredicate.byName; import static fr.vidal.oss.jax_rs_linker.predicates.UnparseableValuePredicate.IS_UNPARSEABLE; - import static javax.tools.Diagnostic.Kind.ERROR; public class ElementParser { @@ -32,11 +36,13 @@ public class ElementParser { private final PathVisitor pathVisitor; private final ClassWorkLoad workLoad; private final HttpVerbVisitor httpVerbVisitor; + private final Types typeUtils; public ElementParser(Messager messager, Types typeUtils) { this.messager = messager; + this.typeUtils = typeUtils; this.pathVisitor = new PathVisitor(typeUtils); this.workLoad = ClassWorkLoad.init(); this.httpVerbVisitor = new HttpVerbVisitor(); @@ -91,21 +97,21 @@ private Optional link(ExecutableElement methodElement, boolean withSelf private Optional relatedResourceName(ExecutableElement methodElement) { return FluentIterable.from(methodElement.getAnnotationMirrors()) - .filter(byName("SubResource")) - .transform(TO_METHOD_VALUE_ENTRIES) - .transform(TO_STRING_VALUE) - .firstMatch(not(IS_UNPARSEABLE)); + .filter(byName("SubResource")) + .transform(TO_METHOD_VALUE_ENTRIES) + .transform(TO_STRING_VALUE) + .firstMatch(not(IS_UNPARSEABLE)); } private Mapping mapping(ExecutableElement methodElement, ApiLink link, HttpVerb httpVerb, String path) { return new Mapping( - javaLocation(methodElement), - api( - link, - httpVerb, - apiPath(methodElement, path), - apiQuery(methodElement.getParameters()) - ) + javaLocation(methodElement), + api( + link, + httpVerb, + apiPath(methodElement, path), + apiQuery(methodElement.getParameters()) + ) ); } @@ -127,23 +133,23 @@ private Optional trackMandatoryParsing(ApiLink link, Mapping m private JavaLocation javaLocation(ExecutableElement methodElement) { return new JavaLocation( - className(methodElement), - methodElement.getSimpleName().toString() + className(methodElement), + methodElement.getSimpleName().toString() ); } private Api api(ApiLink link, HttpVerb httpVerb, ApiPath apiPath, ApiQuery apiQuery) { return new Api( - httpVerb, - link, - apiPath, - apiQuery); + httpVerb, + link, + apiPath, + apiQuery); } private ApiPath apiPath(ExecutableElement methodElement, String path) { return new ApiPath( - path, - pathVisitor.visitPathParameters(methodElement) + path, + pathVisitor.visitPathParameters(methodElement) ); } @@ -154,10 +160,39 @@ private ApiQuery apiQuery(Collection parameters) { if (annotation != null) { queryParameters.add(INTO_QUERY_PARAMETER.apply(variableElement)); } + BeanParam beanParam = variableElement.getAnnotation(BeanParam.class); + if (beanParam != null) { + Element beanParamTargetClass = typeUtils.asElement(variableElement.asType()); + List enclosedElements = beanParamTargetClass.getEnclosedElements(); + for (ExecutableElement ctor : ElementFilter.constructorsIn(enclosedElements)) { + for (VariableElement ctorParameter : ctor.getParameters()) { + addToQueryParametersIfApplicable(queryParameters, ctorParameter); + } + } + + for (VariableElement field : ElementFilter.fieldsIn(enclosedElements)) { + addToQueryParametersIfApplicable(queryParameters, field); + } + + for (ExecutableElement method : ElementFilter.methodsIn(enclosedElements)) { + if (method.getSimpleName().toString().startsWith("set") + && typeUtils.isSameType(method.getReturnType(),typeUtils.getNoType(TypeKind.VOID))) { + addToQueryParametersIfApplicable(queryParameters, method); + } + } + } } return new ApiQuery(queryParameters); } + private void addToQueryParametersIfApplicable(Collection queryParameters, + Element ctorParameter) { + QueryParam queryParam = ctorParameter.getAnnotation(QueryParam.class); + if (queryParam != null) { + queryParameters.add(INTO_QUERY_PARAMETER.apply(ctorParameter)); + } + } + private ClassName className(ExecutableElement element) { TypeElement classElement = (TypeElement) element.getEnclosingElement(); return ClassName.valueOf(classElement.getQualifiedName().toString()); diff --git a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/writer/LinkerWriter.java b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/writer/LinkerWriter.java index a2dad12..878952a 100644 --- a/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/writer/LinkerWriter.java +++ b/jax-rs-linker/src/main/java/fr/vidal/oss/jax_rs_linker/writer/LinkerWriter.java @@ -158,12 +158,11 @@ private String pathParametersAsList(Collection pathParameters) { private String queryParametersAsList(Collection queryParameters) { StringBuilder builder = new StringBuilder(); Iterator iterator = queryParameters.iterator(); - while(iterator.hasNext()) { + while (iterator.hasNext()) { QueryParameter parameter = iterator.next(); String separator = iterator.hasNext() ? "," : ""; builder.append(String.format( - "queryParameter(\"%s\", \"%s\")%s", - parameter.getClassName(), + "queryParameter(\"%s\")%s", parameter.getName(), separator )); @@ -194,15 +193,11 @@ private MethodSpec queryParameterMethod() { return MethodSpec.methodBuilder("queryParameter") .returns(QueryParameter.class) .addModifiers(PRIVATE, STATIC) - .addParameter( - ParameterSpec.builder(String.class, "type", FINAL).build()) .addParameter( ParameterSpec.builder(String.class, "name", FINAL).build()) .addStatement( - "return new $T($T.valueOf($L), $L)", + "return new $T($L)", QueryParameter.class, - ClassName.class, - "type", "name" ) .build(); diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/LinkerAnnotationProcessorTest.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/LinkerAnnotationProcessorTest.java index 5ccb08a..3b13124 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/LinkerAnnotationProcessorTest.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/LinkerAnnotationProcessorTest.java @@ -34,11 +34,11 @@ public void generates_graph_of_linkers() { .and() .generatesSources( forResource("ProductResourceLinker.java"), + forResource("PersonResourceLinker.java"), forResource("BrandResourceLinker.java"), forResource("ProductResourcePathParameters.java"), forResource("BrandResourcePathParameters.java"), forResource("PersonResourcePathParameters.java"), - forResource("PersonResourcePathParameters.java"), forResource("PersonResourceQueryParameters.java"), forResource("linkers/Linkers.java") ); diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/ApiQueryTest.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/ApiQueryTest.java index 34c9001..58d80a5 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/ApiQueryTest.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/ApiQueryTest.java @@ -23,7 +23,7 @@ public void equals_should_return_true_if_object_are_identical() { @Test public void toString_should_return_a_valid_string_representation() { - Collection queryParameters = newArrayList(new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Foo"),new QueryParameter(ClassName.valueOf("fr.vidal.oss.Bar"),"Bar") ); + Collection queryParameters = newArrayList(new QueryParameter("Foo"),new QueryParameter("Bar") ); ApiQuery apiQuery = new ApiQuery(queryParameters); assertThat(apiQuery.toString()).isEqualTo("ApiQuery{queryParameters=[FooBar]}"); diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/QueryParameterTest.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/QueryParameterTest.java index a412b34..b57e726 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/QueryParameterTest.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/model/QueryParameterTest.java @@ -8,7 +8,7 @@ public class QueryParameterTest { @Test public void equals_should_return_true_if_objects_are_identical() { - QueryParameter queryParameter = new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Foo"); + QueryParameter queryParameter = new QueryParameter("Foo"); QueryParameter queryParameter1 = queryParameter; assertThat(queryParameter).isEqualTo(queryParameter1); @@ -16,7 +16,7 @@ public void equals_should_return_true_if_objects_are_identical() { @Test public void equals_should_return_false_if_object_is_null() { - QueryParameter queryParameter = new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Foo"); + QueryParameter queryParameter = new QueryParameter("Foo"); QueryParameter queryParameter1 = null; assertThat(queryParameter).isNotEqualTo(queryParameter1); @@ -24,26 +24,16 @@ public void equals_should_return_false_if_object_is_null() { @Test public void equals_should_return_false_Objects_have_not_the_same_class() { - QueryParameter queryParameter = new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Foo"); + QueryParameter queryParameter = new QueryParameter("Foo"); String queryParameter1 = "baz"; assertThat(queryParameter).isNotEqualTo(queryParameter1); } - @Test - public void equals_should_return_false_Objects_are_not_deeply_identical() { - QueryParameter queryParameter = new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Foo"); - QueryParameter queryParameter1 = new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Bar"); - QueryParameter queryParameter2 = new QueryParameter(ClassName.valueOf("fr.vidal.oss.FooBaz"),"Foo"); - - assertThat(queryParameter).isNotEqualTo(queryParameter1); - assertThat(queryParameter).isNotEqualTo(queryParameter2); - } - @Test public void toString_should_return_a_valid_string() { - QueryParameter queryParameter = new QueryParameter(ClassName.valueOf("fr.vidal.oss.Foo"),"Foo"); + QueryParameter queryParameter = new QueryParameter("Foo"); - assertThat(queryParameter.toString()).isEqualTo("QueryParameter { name='Foo', className='fr.vidal.oss.Foo' }"); + assertThat(queryParameter.toString()).isEqualTo("QueryParameter{name='Foo'}"); } } diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ElementParserTest.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ElementParserTest.java index 9218b39..49d21dd 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ElementParserTest.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ElementParserTest.java @@ -57,6 +57,36 @@ public void parses_method_to_mapping_representation() { .containsExactly(new PathParameter(ClassName.valueOf("int"), "id")); } + @Test + public void parses_method_to_mapping_representation_with_bean_param() { + ExecutableElement method = methodElements.of( + "fr.vidal.oss.jax_rs_linker.parser.ProductResource", + "productById" + ); + + Mapping mapping = parser.parse(method).get(); + + JavaLocation javaLocation = mapping.getJavaLocation(); + assertThat(javaLocation.getClassName().fullyQualifiedName()) + .isEqualTo("fr.vidal.oss.jax_rs_linker.parser.ProductResource"); + assertThat(javaLocation.getMethodName()) + .isEqualTo("productById"); + + Api api = mapping.getApi(); + assertThat(api.getApiPath().getPath()) + .isEqualTo("/api/product/{id}"); + assertThat(api.getApiPath().getPathParameters()) + .containsExactly(new PathParameter(ClassName.valueOf("int"), "id")); + assertThat(api.getApiQuery().getQueryParameters()) + .hasSize(4) + .containsExactly( + new QueryParameter("start-page"), + new QueryParameter("page-size"), + new QueryParameter("is-applicable"), + new QueryParameter("haters-gonna-hate") + ); + } + @Test public void fails_to_parse_because_of_absence_of_path() { ExecutableElement method = methodElements.of( diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/PagingTest.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/PagingTest.java index bd90530..8f454ee 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/PagingTest.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/PagingTest.java @@ -6,6 +6,9 @@ public class PagingTest { private final int pageStart; private final int pageSize; + @QueryParam("is-applicable") + private boolean isApplicable = false; + public PagingTest(@DefaultValue("1") @QueryParam("start-page") int pageStart, @DefaultValue("25") @QueryParam("page-size") int pageSize) { @@ -13,4 +16,18 @@ public PagingTest(@DefaultValue("1") @QueryParam("start-page") int pageStart, this.pageSize = pageSize; } + @QueryParam("to be ignored") + public void testOfAnnotatedMethodIgnored(String value) { + + } + + @QueryParam("haters-gonna-hate") + public void setUselessParameter(String value) { + } + + @QueryParam("non-void-method") + public String setNonVoidMethod(String value) { + return ""; + } + } diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ProductResource.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ProductResource.java index c3fa57d..e979bf5 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ProductResource.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/parser/ProductResource.java @@ -1,10 +1,9 @@ package fr.vidal.oss.jax_rs_linker.parser; import fr.vidal.oss.jax_rs_linker.api.Self; +import fr.vidal.oss.jax_rs_linker.api.SubResource; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; @Path("/api/product") public class ProductResource { @@ -12,7 +11,7 @@ public class ProductResource { @GET @Path("/{id}") @Self - public String productById(@PathParam("id") int id) { + public String productById(@PathParam("id") int id, @BeanParam PagingTest paging) { return ""; } } diff --git a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/writer/EnumConstantsTest.java b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/writer/EnumConstantsTest.java index b27a8c8..a67a296 100644 --- a/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/writer/EnumConstantsTest.java +++ b/jax-rs-linker/src/test/java/fr/vidal/oss/jax_rs_linker/writer/EnumConstantsTest.java @@ -1,6 +1,5 @@ package fr.vidal.oss.jax_rs_linker.writer; - import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/jax-rs-linker/src/test/resources/BrandResourceLinker.java b/jax-rs-linker/src/test/resources/BrandResourceLinker.java index 712e510..1b3990b 100644 --- a/jax-rs-linker/src/test/resources/BrandResourceLinker.java +++ b/jax-rs-linker/src/test/resources/BrandResourceLinker.java @@ -38,7 +38,7 @@ private static PathParameter pathParameter(final String type, final String name) return new PathParameter(ClassName.valueOf(type), name); } - private static QueryParameter queryParameter(final String type, final String name) { - return new QueryParameter(ClassName.valueOf(type), name); + private static QueryParameter queryParameter(final String name) { + return new QueryParameter(name); } } diff --git a/jax-rs-linker/src/test/resources/DevNullResourceLinker.java b/jax-rs-linker/src/test/resources/DevNullResourceLinker.java index b352416..37df10c 100644 --- a/jax-rs-linker/src/test/resources/DevNullResourceLinker.java +++ b/jax-rs-linker/src/test/resources/DevNullResourceLinker.java @@ -30,7 +30,7 @@ private static PathParameter pathParameter(final String type, final String name) return new PathParameter(ClassName.valueOf(type), name); } - private static QueryParameter queryParameter(final String type, final String name) { - return new QueryParameter(ClassName.valueOf(type), name); + private static QueryParameter queryParameter(final String name) { + return new QueryParameter(name); } } diff --git a/jax-rs-linker/src/test/resources/PersonResource.java b/jax-rs-linker/src/test/resources/PersonResource.java index 7d0a1e7..50d43e6 100644 --- a/jax-rs-linker/src/test/resources/PersonResource.java +++ b/jax-rs-linker/src/test/resources/PersonResource.java @@ -3,10 +3,7 @@ import fr.vidal.oss.jax_rs_linker.api.Self; import fr.vidal.oss.jax_rs_linker.api.SubResource; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; @Path("/person") public class PersonResource { diff --git a/jax-rs-linker/src/test/resources/PersonResourceLinker.java b/jax-rs-linker/src/test/resources/PersonResourceLinker.java index 1d23bcc..fe823d7 100644 --- a/jax-rs-linker/src/test/resources/PersonResourceLinker.java +++ b/jax-rs-linker/src/test/resources/PersonResourceLinker.java @@ -1,26 +1,38 @@ - package fr.vidal.oss.jax_rs_linker.parser; -import fr.vidal.oss.jax_rs_linker.model.*; - +import fr.vidal.oss.jax_rs_linker.model.ClassName; +import fr.vidal.oss.jax_rs_linker.model.PathParameter; +import fr.vidal.oss.jax_rs_linker.model.QueryParameter; +import fr.vidal.oss.jax_rs_linker.model.TemplatedUrl; +import java.lang.String; import java.util.Arrays; import javax.annotation.Generated; @Generated("fr.vidal.oss.jax_rs_linker.LinkerAnnotationProcessor") -public class PersonResourceLinker { - +public final class PersonResourceLinker { private final String contextPath; public PersonResourceLinker() { this(""); } - public PersonResourceLinker(String contextPath) { + public PersonResourceLinker(final String contextPath) { this.contextPath = contextPath; } - public TemplatedUrl self() { - return new TemplatedUrl(contextPath, Arrays.asList(new PathParameter(ClassName.valueOf("int"), "id")), queryParameters); + public final TemplatedUrl self() { + return new TemplatedUrl(contextPath + "/person/{id}", Arrays.asList(pathParameter("int", "id")), Arrays.asList(queryParameter("alive-flag"))); + } + + public final TemplatedUrl relatedPersonResource() { + return new TemplatedUrl(contextPath + "/person/name/{firstName}", Arrays.asList(pathParameter("java.lang.String", "firstName")), Arrays.asList()); + } + + private static PathParameter pathParameter(final String type, final String name) { + return new PathParameter(ClassName.valueOf(type), name); } + private static QueryParameter queryParameter(final String name) { + return new QueryParameter(name); + } } diff --git a/jax-rs-linker/src/test/resources/ProductResourceLinker.java b/jax-rs-linker/src/test/resources/ProductResourceLinker.java index 923576a..c07bc10 100644 --- a/jax-rs-linker/src/test/resources/ProductResourceLinker.java +++ b/jax-rs-linker/src/test/resources/ProductResourceLinker.java @@ -34,7 +34,7 @@ private static PathParameter pathParameter(final String type, final String name) return new PathParameter(ClassName.valueOf(type), name); } - private static QueryParameter queryParameter(final String type, final String name) { - return new QueryParameter(ClassName.valueOf(type), name); + private static QueryParameter queryParameter(final String name) { + return new QueryParameter(name); } }