From db0e65266c1391d7ce86fcf9c69f24dda3bb07a9 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Tue, 15 Apr 2014 05:28:37 +0800 Subject: [PATCH 01/13] added header annotation --- .../annotations/rest/Header.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java new file mode 100644 index 0000000000..600d922313 --- /dev/null +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java @@ -0,0 +1,17 @@ +package org.androidannotations.annotations.rest; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by jmaltz on 4/15/14. + */ + +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface Header { + String key(); + String value(); +} From 9c00a44daa02bd017ba71b841b24c875406cb53f Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Tue, 15 Apr 2014 05:49:02 +0800 Subject: [PATCH 02/13] added basic docs and license to the header --- .../annotations/rest/Header.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java index 600d922313..ca4874eb84 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java @@ -1,3 +1,18 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package org.androidannotations.annotations.rest; import java.lang.annotation.ElementType; @@ -5,10 +20,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; + /** - * Created by jmaltz on 4/15/14. + * Use on methods in {@link Rest} annotated class to add headers to a particular method */ - @Retention(RetentionPolicy.CLASS) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Header { From 1aea6d5f80c97415f1e38235c0d143257190d40b Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Tue, 15 Apr 2014 05:50:49 +0800 Subject: [PATCH 03/13] renamed a variable in the RestAnnotationHelper so that it is more sensible --- .../helper/RestAnnotationHelper.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java index ba4c68d645..ece6c008df 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java @@ -183,12 +183,12 @@ public String acceptedHeaders(ExecutableElement executableElement) { } public String[] requiredHeaders(ExecutableElement executableElement) { - RequiresHeader cookieAnnotation = executableElement.getAnnotation(RequiresHeader.class); - if (cookieAnnotation == null) { - cookieAnnotation = executableElement.getEnclosingElement().getAnnotation(RequiresHeader.class); + RequiresHeader headerAnnotation = executableElement.getAnnotation(RequiresHeader.class); + if (headerAnnotation == null) { + headerAnnotation = executableElement.getEnclosingElement().getAnnotation(RequiresHeader.class); } - if (cookieAnnotation != null) { - return cookieAnnotation.value(); + if (headerAnnotation != null) { + return headerAnnotation.value(); } else { return null; } From 3f31e6da01ff2a62a917d7dc48d45737925fea3f Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Tue, 15 Apr 2014 08:52:57 +0800 Subject: [PATCH 04/13] full implementation of restful headers (I think). Need to do lots of testing --- .../annotations/rest/Headers.java | 8 ++++ .../helper/RestAnnotationHelper.java | 47 ++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java new file mode 100644 index 0000000000..53adf602f5 --- /dev/null +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java @@ -0,0 +1,8 @@ +package org.androidannotations.annotations.rest; + +/** + * Use on methods in {@link Rest} annotated class to add headers to a given method + */ +public @interface Headers { + Header[] value(); +} diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java index ece6c008df..93d37980db 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -40,6 +41,8 @@ import javax.lang.model.type.WildcardType; import org.androidannotations.annotations.rest.Accept; +import org.androidannotations.annotations.rest.Header; +import org.androidannotations.annotations.rest.Headers; import org.androidannotations.annotations.rest.RequiresAuthentication; import org.androidannotations.annotations.rest.RequiresCookie; import org.androidannotations.annotations.rest.RequiresCookieInUrl; @@ -194,6 +197,39 @@ public String[] requiredHeaders(ExecutableElement executableElement) { } } + private Map declaredHeaders(ExecutableElement executableElement) { + Headers headers = executableElement.getAnnotation(Headers.class); + //HEY CODE REVIEWER: DO I NEED TO CALL .getEnclosingElement HERE() WHY/WHY NOT? + Map headerMap = new HashMap(); + if (headers != null) { + Header[] headerList = headers.value(); + + // Prevent an empty annotation from crashing things + if (headerList != null) { + for (Header header : headerList) { + headerMap.putAll(processHeader(header)); + } + } + } + + Header header = executableElement.getAnnotation(Header.class); + if (header != null) { + headerMap.putAll(processHeader(header)); + } + + return headerMap; + } + + private Map processHeader(Header singleHeader) { + if (singleHeader == null) { + return null; + } else { + Map headerInfo = new HashMap(); + headerInfo.put(singleHeader.key(), singleHeader.value()); + return headerInfo; + } + } + public String[] requiredCookies(ExecutableElement executableElement) { RequiresCookie cookieAnnotation = executableElement.getAnnotation(RequiresCookie.class); if (cookieAnnotation == null) { @@ -265,6 +301,14 @@ public JVar declareHttpHeaders(ExecutableElement executableElement, RestHolder h body.add(JExpr.invoke(httpHeadersVar, "setAccept").arg(mediaTypeListParam)); } + // Set pre-defined headers here so that they can be overridden by any runtime calls + Map declaredHeaders = declaredHeaders(executableElement); + if (declaredHeaders != null) { + for (Map.Entry declaredHeader: declaredHeaders.entrySet()) { + body.add(JExpr.invoke(httpHeadersVar, "set").arg(declaredHeader.getKey()).arg(declaredHeader.getValue())); + } + } + if (requiresCookies) { JClass stringBuilderClass = holder.classes().STRING_BUILDER; JVar cookiesValueVar = body.decl(stringBuilderClass, "cookiesValue", JExpr._new(stringBuilderClass)); @@ -279,12 +323,11 @@ public JVar declareHttpHeaders(ExecutableElement executableElement, RestHolder h body.add(JExpr.invoke(httpHeadersVar, "set").arg("Cookie").arg(cookiesToString)); } - if (requiresHeaders) { + if (requiresHeaders) { for (String header : headers) { JInvocation headerValue = JExpr.invoke(holder.getAvailableHeadersField(), "get").arg(header); body.add(JExpr.invoke(httpHeadersVar, "set").arg(header).arg(headerValue)); } - } if (requiresAuth) { From 20af46ae7e53e83e0afffe6d3b57dc37d7ecc3bd Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Wed, 16 Apr 2014 07:18:16 +0800 Subject: [PATCH 05/13] added the two test classes that are necessary --- .../rest/ClientWithOneHeader.java | 13 +++++++++++++ .../rest/RestHeadersTest.java | 17 +++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java new file mode 100644 index 0000000000..863f8a3a69 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java @@ -0,0 +1,13 @@ +package org.androidannotations.rest; + +import org.androidannotations.annotations.rest.Header; +import org.androidannotations.annotations.rest.Rest; +import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; + +@Rest(converters = {MappingJacksonHttpMessageConverter.class}) +public interface ClientWithOneHeader { + + @Header(key="testKey", value="testVal") + void requestWithHeader(); + +} diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java new file mode 100644 index 0000000000..5cf53ccda3 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java @@ -0,0 +1,17 @@ +package org.androidannotations.rest; + +import org.androidannotations.AndroidAnnotationProcessor; +import org.androidannotations.utils.AAProcessorTestHelper; +import org.junit.Before; + +/** + * Created by jmaltz on 4/16/14. + */ +public class RestHeadersTest extends AAProcessorTestHelper { + + @Before + public void setup() { + addManifestProcessorParameter(RestConverterTest.class); + addProcessor(AndroidAnnotationProcessor.class); + } +} From 33a4fd4f590b2a134b8b297d6f5614bdf2b4c7a4 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Wed, 16 Apr 2014 08:32:41 +0800 Subject: [PATCH 06/13] got the most basic test working --- .../androidannotations/helper/RestAnnotationHelper.java | 6 ++++-- .../org/androidannotations/rest/ClientWithOneHeader.java | 5 ++++- .../java/org/androidannotations/rest/RestHeadersTest.java | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java index 93d37980db..644f4aff07 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java @@ -288,7 +288,9 @@ public JVar declareHttpHeaders(ExecutableElement executableElement, RestHolder h boolean requiresAuth = requiredAuthentication(executableElement); - if (hasMediaTypeDefined || requiresCookies || requiresHeaders || requiresAuth) { + Map declaredHeaders = declaredHeaders(executableElement);; + + if (hasMediaTypeDefined || requiresCookies || requiresHeaders || requiresAuth || declaredHeaders.size() > 0) { // we need the headers httpHeadersVar = body.decl(holder.classes().HTTP_HEADERS, "httpHeaders", JExpr._new(holder.classes().HTTP_HEADERS)); } @@ -302,7 +304,7 @@ public JVar declareHttpHeaders(ExecutableElement executableElement, RestHolder h } // Set pre-defined headers here so that they can be overridden by any runtime calls - Map declaredHeaders = declaredHeaders(executableElement); + if (declaredHeaders != null) { for (Map.Entry declaredHeader: declaredHeaders.entrySet()) { body.add(JExpr.invoke(httpHeadersVar, "set").arg(declaredHeader.getKey()).arg(declaredHeader.getValue())); diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java index 863f8a3a69..998708102c 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java @@ -1,13 +1,16 @@ package org.androidannotations.rest; import org.androidannotations.annotations.rest.Header; +import org.androidannotations.annotations.rest.Post; +import org.androidannotations.annotations.rest.RequiresHeader; import org.androidannotations.annotations.rest.Rest; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; -@Rest(converters = {MappingJacksonHttpMessageConverter.class}) +@Rest(converters = MappingJacksonHttpMessageConverter.class) public interface ClientWithOneHeader { @Header(key="testKey", value="testVal") + @Post("/test/") void requestWithHeader(); } diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java index 5cf53ccda3..2163268a39 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java @@ -3,6 +3,7 @@ import org.androidannotations.AndroidAnnotationProcessor; import org.androidannotations.utils.AAProcessorTestHelper; import org.junit.Before; +import org.junit.Test; /** * Created by jmaltz on 4/16/14. @@ -14,4 +15,10 @@ public void setup() { addManifestProcessorParameter(RestConverterTest.class); addProcessor(AndroidAnnotationProcessor.class); } + + @Test + public void client_with_one_header_compiles() { + CompileResult result = compileFiles(ClientWithOneHeader.class); + assertCompilationSuccessful(result); + } } From cf639ef1998d320308424c0eecaef55bf7547901 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Wed, 16 Apr 2014 08:52:09 +0800 Subject: [PATCH 07/13] covered all the basic cases in testing, need to refactor a little --- .../rest/ClientWithMultipleHeaders.java | 18 ++++++++++++++++ .../rest/ClientWithOneHeaderInHeaders.java | 21 +++++++++++++++++++ .../rest/RestHeadersTest.java | 13 ++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java create mode 100644 AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java new file mode 100644 index 0000000000..501527d221 --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java @@ -0,0 +1,18 @@ +package org.androidannotations.rest; + +import org.androidannotations.annotations.rest.Header; +import org.androidannotations.annotations.rest.Headers; +import org.androidannotations.annotations.rest.Post; +import org.androidannotations.annotations.rest.Rest; +import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; + +@Rest(converters = MappingJacksonHttpMessageConverter.class) +public interface ClientWithMultipleHeaders { + + @Headers({ + @Header(key="testKey", value="testVal"), + @Header(key="testKey1", value="testVal1") + }) + @Post("/test/") + void requestWithOneHeader(); +} diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java new file mode 100644 index 0000000000..f8da8cd24e --- /dev/null +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java @@ -0,0 +1,21 @@ +package org.androidannotations.rest; + + +import org.androidannotations.annotations.rest.Header; +import org.androidannotations.annotations.rest.Headers; +import org.androidannotations.annotations.rest.Post; +import org.androidannotations.annotations.rest.Rest; +import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; + + +@Rest(converters = MappingJacksonHttpMessageConverter.class) +public interface ClientWithOneHeaderInHeaders { + + @Headers({@Header(key="testKey", value="testVal")}) + @Post("/test/") + void requestWithOneHeader(); + + @Headers(@Header(key="testKey1", value="testVal1")) + @Post("/test1") + void requestWithOneHeaderNoArray(); +} diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java index 2163268a39..7dcba6cb22 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java @@ -5,6 +5,8 @@ import org.junit.Before; import org.junit.Test; +import dalvik.annotation.TestTargetClass; + /** * Created by jmaltz on 4/16/14. */ @@ -21,4 +23,15 @@ public void client_with_one_header_compiles() { CompileResult result = compileFiles(ClientWithOneHeader.class); assertCompilationSuccessful(result); } + + @Test + public void client_with_one_header_in_multiple_annotation_compiles() { + CompileResult result = compileFiles(ClientWithOneHeaderInHeaders.class); + assertCompilationSuccessful(result); + } + + @Test + public void client_with_multiple_headers_test() { + CompileResult result = compileFiles(ClientWithMultipleHeaders.class); + } } From 7692b953064e8619d2897783d076e300907a9d57 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Wed, 16 Apr 2014 09:00:25 +0800 Subject: [PATCH 08/13] removed a useless test --- .../androidannotations/rest/ClientWithOneHeaderInHeaders.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java index f8da8cd24e..3fe7f9d879 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java @@ -14,8 +14,4 @@ public interface ClientWithOneHeaderInHeaders { @Headers({@Header(key="testKey", value="testVal")}) @Post("/test/") void requestWithOneHeader(); - - @Headers(@Header(key="testKey1", value="testVal1")) - @Post("/test1") - void requestWithOneHeaderNoArray(); } From b5d0cadd2ce93718044ee48b0749db56ad0df9aa Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Thu, 17 Apr 2014 08:24:09 +0800 Subject: [PATCH 09/13] updated how the header name was specified and added some docs --- .../annotations/rest/Header.java | 10 +++++-- .../annotations/rest/Headers.java | 30 ++++++++++++++++++- .../helper/RestAnnotationHelper.java | 2 +- .../rest/ClientWithMultipleHeaders.java | 4 +-- .../rest/ClientWithOneHeader.java | 2 +- .../rest/ClientWithOneHeaderInHeaders.java | 2 +- .../rest/RestHeadersTest.java | 3 -- 7 files changed, 42 insertions(+), 11 deletions(-) diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java index ca4874eb84..af584f44b4 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java @@ -23,10 +23,16 @@ /** * Use on methods in {@link Rest} annotated class to add headers to a particular method + * + * Example usage: + * + * @Header(headerName="keep-alive", value="300") + * @Post("/test") + * public void testRoute() */ @Retention(RetentionPolicy.CLASS) -@Target({ElementType.TYPE, ElementType.METHOD}) +@Target({ElementType.METHOD}) public @interface Header { - String key(); + String headerName(); String value(); } diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java index 53adf602f5..8c23899dad 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Headers.java @@ -1,8 +1,36 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package org.androidannotations.annotations.rest; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + /** - * Use on methods in {@link Rest} annotated class to add headers to a given method + * Use on methods in {@link Rest} annotated class to add multiple headers to a given method + * + * Example usage + * @Headers({@Header(headerName="cache-control" value="64000"), + * @Header(headerName="keep-alive" value="300")}) + * @Post("/test") + * public void getTest() */ +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.METHOD}) public @interface Headers { Header[] value(); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java index 644f4aff07..b66a6804e2 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java @@ -225,7 +225,7 @@ private Map processHeader(Header singleHeader) { return null; } else { Map headerInfo = new HashMap(); - headerInfo.put(singleHeader.key(), singleHeader.value()); + headerInfo.put(singleHeader.name(), singleHeader.value()); return headerInfo; } } diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java index 501527d221..7418e33261 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java @@ -10,8 +10,8 @@ public interface ClientWithMultipleHeaders { @Headers({ - @Header(key="testKey", value="testVal"), - @Header(key="testKey1", value="testVal1") + @Header(headerName="testKey", value="testVal"), + @Header(headerName="testKey1", value="testVal1") }) @Post("/test/") void requestWithOneHeader(); diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java index 998708102c..fc12c99d11 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java @@ -9,7 +9,7 @@ @Rest(converters = MappingJacksonHttpMessageConverter.class) public interface ClientWithOneHeader { - @Header(key="testKey", value="testVal") + @Header(headerName="testKey", value="testVal") @Post("/test/") void requestWithHeader(); diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java index 3fe7f9d879..61608ca004 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java @@ -11,7 +11,7 @@ @Rest(converters = MappingJacksonHttpMessageConverter.class) public interface ClientWithOneHeaderInHeaders { - @Headers({@Header(key="testKey", value="testVal")}) + @Headers({@Header(headerName="testKey", value="testVal")}) @Post("/test/") void requestWithOneHeader(); } diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java index 7dcba6cb22..9ce1cf26f2 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java @@ -7,9 +7,6 @@ import dalvik.annotation.TestTargetClass; -/** - * Created by jmaltz on 4/16/14. - */ public class RestHeadersTest extends AAProcessorTestHelper { @Before From c9edeaa60b9f33fa3b5079338a1af94097bf8122 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Thu, 17 Apr 2014 10:07:08 +0800 Subject: [PATCH 10/13] added whitespace --- .../java/org/androidannotations/annotations/rest/Header.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java index af584f44b4..9233743640 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/rest/Header.java @@ -25,7 +25,7 @@ * Use on methods in {@link Rest} annotated class to add headers to a particular method * * Example usage: - * + * * @Header(headerName="keep-alive", value="300") * @Post("/test") * public void testRoute() From 52d791de4e45b7b6162aa20991448970b47fd95c Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Thu, 17 Apr 2014 10:12:40 +0800 Subject: [PATCH 11/13] forgot to rename a method call --- .../org/androidannotations/helper/RestAnnotationHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java index b66a6804e2..856f6e7e4e 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java @@ -225,7 +225,7 @@ private Map processHeader(Header singleHeader) { return null; } else { Map headerInfo = new HashMap(); - headerInfo.put(singleHeader.name(), singleHeader.value()); + headerInfo.put(singleHeader.headerName(), singleHeader.value()); return headerInfo; } } From 20c84614b7dcefe4565df7e7bc8d30f8b53f51b1 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Thu, 17 Apr 2014 10:14:45 +0800 Subject: [PATCH 12/13] added licensing headers --- .../rest/ClientWithMultipleHeaders.java | 15 +++++++++++++++ .../rest/ClientWithOneHeader.java | 15 +++++++++++++++ .../rest/ClientWithOneHeaderInHeaders.java | 15 +++++++++++++++ .../androidannotations/rest/RestHeadersTest.java | 15 +++++++++++++++ 4 files changed, 60 insertions(+) diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java index 7418e33261..e4b3bdea30 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithMultipleHeaders.java @@ -1,3 +1,18 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package org.androidannotations.rest; import org.androidannotations.annotations.rest.Header; diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java index fc12c99d11..0b3ffcdbe6 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeader.java @@ -1,3 +1,18 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package org.androidannotations.rest; import org.androidannotations.annotations.rest.Header; diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java index 61608ca004..5a75028d11 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/ClientWithOneHeaderInHeaders.java @@ -1,3 +1,18 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package org.androidannotations.rest; diff --git a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java index 9ce1cf26f2..67343240eb 100644 --- a/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java +++ b/AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/rest/RestHeadersTest.java @@ -1,3 +1,18 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package org.androidannotations.rest; import org.androidannotations.AndroidAnnotationProcessor; From e9946c54ef665c2f53f6c857481dbe6a66a8bf64 Mon Sep 17 00:00:00 2001 From: Jonathan Maltz Date: Thu, 17 Apr 2014 10:17:00 +0800 Subject: [PATCH 13/13] renamed a the requiresHeader variable to make it even more clear --- .../helper/RestAnnotationHelper.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java index 856f6e7e4e..1ce8cf02f6 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/RestAnnotationHelper.java @@ -186,12 +186,12 @@ public String acceptedHeaders(ExecutableElement executableElement) { } public String[] requiredHeaders(ExecutableElement executableElement) { - RequiresHeader headerAnnotation = executableElement.getAnnotation(RequiresHeader.class); - if (headerAnnotation == null) { - headerAnnotation = executableElement.getEnclosingElement().getAnnotation(RequiresHeader.class); + RequiresHeader requiresHeaderAnnotation = executableElement.getAnnotation(RequiresHeader.class); + if (requiresHeaderAnnotation == null) { + requiresHeaderAnnotation = executableElement.getEnclosingElement().getAnnotation(RequiresHeader.class); } - if (headerAnnotation != null) { - return headerAnnotation.value(); + if (requiresHeaderAnnotation != null) { + return requiresHeaderAnnotation.value(); } else { return null; }