org.jclouds.rest.internal
Class RestAnnotationProcessor<T>

java.lang.Object
  extended by org.jclouds.rest.internal.RestAnnotationProcessor<T>

public class RestAnnotationProcessor<T>
extends Object

Creates http methods based on annotations on a class or interface.

Author:
Adrian Cole

Nested Class Summary
static class RestAnnotationProcessor.MethodKey
           
 
Field Summary
static String BOUNDARY
           
static com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<Boolean>> futureBooleanLiteral
           
static com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<HttpResponse>> futureHttpResponseLiteral
           
static com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<InputStream>> futureInputStreamLiteral
           
static com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<String>> futureStringLiteral
           
static com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<URI>> futureURILiteral
           
static com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<Void>> futureVoidLiteral
           
protected  Logger logger
           
 
Constructor Summary
RestAnnotationProcessor(com.google.inject.Injector injector, com.google.common.cache.Cache<Class<?>,Boolean> seedAnnotationCache, String apiVersion, ParseSax.Factory parserFactory, HttpUtils utils, com.google.inject.TypeLiteral<T> typeLiteral)
           
 
Method Summary
 void addHeaderIfAnnotationPresentOnMethod(com.google.common.collect.Multimap<String,String> headers, Method method, Collection<Map.Entry<String,String>> tokenValues)
           
 com.google.common.collect.Multimap<String,String> buildHeaders(Collection<Map.Entry<String,String>> tokenValues, Method method, Object... args)
           
static com.google.common.base.Function<Exception,?> createExceptionParserOrThrowResourceNotFoundOn404IfNoAnnotation(com.google.inject.Injector injector, Method method)
           
 GeneratedHttpRequest<T> createRequest(Method method, Object... args)
           
static com.google.common.base.Function<HttpResponse,?> createResponseParser(ParseSax.Factory parserFactory, com.google.inject.Injector injector, Method method, HttpRequest request)
           
 GeneratedHttpRequest<T> decorateRequest(GeneratedHttpRequest<T> request)
           
static com.google.common.collect.Multimap<String,String> filterOutContentHeaders(com.google.common.collect.Multimap<String,String> headers)
           
static HttpRequest findHttpRequestInArgs(Object[] args)
           
static Payload findPayloadInArgs(Object[] args)
           
 Method getDelegateOrNull(Method in)
           
static URI getEndpointFor(Method method, Object[] args, com.google.inject.Injector injector)
           
static URI getEndpointInParametersOrNull(Method method, Object[] args, com.google.inject.Injector injector)
           
 String getHttpMethodOrConstantOrThrowException(Method method)
           
static Set<String> getHttpMethods(Method method)
           
static com.google.inject.Key<? extends com.google.common.base.Function<HttpResponse,?>> getJsonParserKeyForMethod(Method method)
           
static com.google.inject.Key<? extends com.google.common.base.Function<HttpResponse,?>> getJsonParserKeyForMethodAnType(Method method, Type returnVal)
           
 MapBinder getMapPayloadBinderOrNull(Method method, Object... args)
           
static com.google.inject.Key<? extends com.google.common.base.Function<HttpResponse,?>> getParserOrThrowException(Method method)
           
static Type getReturnTypeForMethod(Method method)
           
static Class<? extends ParseSax.HandlerWithResult<?>> getSaxResponseParserClassOrNull(Method method)
           
static com.google.common.base.Function<HttpResponse,?> getTransformerForMethod(Method method, com.google.inject.Injector injector)
           
static Map<Integer,Set<Annotation>> indexWithOnlyOneAnnotation(Method method, String description, com.google.common.cache.Cache<Method,com.google.common.cache.Cache<Integer,Set<Annotation>>> toRefine)
           
static URI replaceQuery(javax.inject.Provider<javax.ws.rs.core.UriBuilder> uriBuilderProvider, URI in, String newQuery, Comparator<Map.Entry<String,String>> sorter, char... skips)
           
 URI replaceQuery(URI in, String newQuery, Comparator<Map.Entry<String,String>> sorter)
           
 void setCaller(ClassMethodArgs caller)
           
 boolean shouldAddHostHeader(Method method)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected Logger logger

BOUNDARY

public static final String BOUNDARY
See Also:
Constant Field Values

futureBooleanLiteral

public static final com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<Boolean>> futureBooleanLiteral

futureStringLiteral

public static final com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<String>> futureStringLiteral

futureVoidLiteral

public static final com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<Void>> futureVoidLiteral

futureURILiteral

public static final com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<URI>> futureURILiteral

futureInputStreamLiteral

public static final com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<InputStream>> futureInputStreamLiteral

futureHttpResponseLiteral

public static final com.google.inject.TypeLiteral<com.google.common.util.concurrent.ListenableFuture<HttpResponse>> futureHttpResponseLiteral
Constructor Detail

RestAnnotationProcessor

@Inject
public RestAnnotationProcessor(com.google.inject.Injector injector,
                                      com.google.common.cache.Cache<Class<?>,Boolean> seedAnnotationCache,
                                      @Named(value="jclouds.api-version")
                                      String apiVersion,
                                      ParseSax.Factory parserFactory,
                                      HttpUtils utils,
                                      com.google.inject.TypeLiteral<T> typeLiteral)
                        throws ExecutionException
Throws:
ExecutionException
Method Detail

createResponseParser

public static com.google.common.base.Function<HttpResponse,?> createResponseParser(ParseSax.Factory parserFactory,
                                                                                   com.google.inject.Injector injector,
                                                                                   Method method,
                                                                                   HttpRequest request)

getTransformerForMethod

public static com.google.common.base.Function<HttpResponse,?> getTransformerForMethod(Method method,
                                                                                      com.google.inject.Injector injector)

createExceptionParserOrThrowResourceNotFoundOn404IfNoAnnotation

public static com.google.common.base.Function<Exception,?> createExceptionParserOrThrowResourceNotFoundOn404IfNoAnnotation(com.google.inject.Injector injector,
                                                                                                                           Method method)

getDelegateOrNull

public Method getDelegateOrNull(Method in)

setCaller

public void setCaller(ClassMethodArgs caller)

createRequest

public GeneratedHttpRequest<T> createRequest(Method method,
                                             Object... args)

filterOutContentHeaders

public static com.google.common.collect.Multimap<String,String> filterOutContentHeaders(com.google.common.collect.Multimap<String,String> headers)

replaceQuery

public URI replaceQuery(URI in,
                        String newQuery,
                        @Nullable
                        Comparator<Map.Entry<String,String>> sorter)

replaceQuery

public static URI replaceQuery(javax.inject.Provider<javax.ws.rs.core.UriBuilder> uriBuilderProvider,
                               URI in,
                               String newQuery,
                               @Nullable
                               Comparator<Map.Entry<String,String>> sorter,
                               char... skips)

getEndpointInParametersOrNull

public static URI getEndpointInParametersOrNull(Method method,
                                                Object[] args,
                                                com.google.inject.Injector injector)
                                         throws ExecutionException
Throws:
ExecutionException

getEndpointFor

public static URI getEndpointFor(Method method,
                                 Object[] args,
                                 com.google.inject.Injector injector)
                          throws ExecutionException
Throws:
ExecutionException

getParserOrThrowException

public static com.google.inject.Key<? extends com.google.common.base.Function<HttpResponse,?>> getParserOrThrowException(Method method)

getJsonParserKeyForMethod

public static com.google.inject.Key<? extends com.google.common.base.Function<HttpResponse,?>> getJsonParserKeyForMethod(Method method)

getReturnTypeForMethod

public static Type getReturnTypeForMethod(Method method)

getJsonParserKeyForMethodAnType

public static com.google.inject.Key<? extends com.google.common.base.Function<HttpResponse,?>> getJsonParserKeyForMethodAnType(Method method,
                                                                                                                               Type returnVal)

getSaxResponseParserClassOrNull

public static Class<? extends ParseSax.HandlerWithResult<?>> getSaxResponseParserClassOrNull(Method method)

getMapPayloadBinderOrNull

public MapBinder getMapPayloadBinderOrNull(Method method,
                                           Object... args)

getHttpMethods

public static Set<String> getHttpMethods(Method method)

getHttpMethodOrConstantOrThrowException

public String getHttpMethodOrConstantOrThrowException(Method method)

shouldAddHostHeader

public boolean shouldAddHostHeader(Method method)

decorateRequest

public GeneratedHttpRequest<T> decorateRequest(GeneratedHttpRequest<T> request)
                                        throws NegativeArraySizeException,
                                               ExecutionException
Throws:
NegativeArraySizeException
ExecutionException

indexWithOnlyOneAnnotation

public static Map<Integer,Set<Annotation>> indexWithOnlyOneAnnotation(Method method,
                                                                      String description,
                                                                      com.google.common.cache.Cache<Method,com.google.common.cache.Cache<Integer,Set<Annotation>>> toRefine)
                                                               throws ExecutionException
Throws:
ExecutionException

buildHeaders

public com.google.common.collect.Multimap<String,String> buildHeaders(Collection<Map.Entry<String,String>> tokenValues,
                                                                      Method method,
                                                                      Object... args)
                                                               throws ExecutionException
Throws:
ExecutionException

addHeaderIfAnnotationPresentOnMethod

public void addHeaderIfAnnotationPresentOnMethod(com.google.common.collect.Multimap<String,String> headers,
                                                 Method method,
                                                 Collection<Map.Entry<String,String>> tokenValues)

findHttpRequestInArgs

public static HttpRequest findHttpRequestInArgs(Object[] args)

findPayloadInArgs

public static Payload findPayloadInArgs(Object[] args)


Copyright © 2009-2011 jclouds. All Rights Reserved.