View Javadoc

1   package com.atlassian.plugins.rest.common.expand.interceptor;
2   
3   import com.atlassian.plugins.rest.common.expand.AdditionalExpandsProvider;
4   import com.atlassian.plugins.rest.common.interceptor.ResourceInterceptor;
5   import com.atlassian.plugins.rest.common.interceptor.MethodInvocation;
6   import com.atlassian.plugins.rest.common.expand.resolver.EntityExpanderResolver;
7   import com.atlassian.plugins.rest.common.expand.parameter.ExpandParameter;
8   import com.atlassian.plugins.rest.common.expand.parameter.DefaultExpandParameter;
9   import com.atlassian.plugins.rest.common.expand.EntityCrawler;
10  import com.google.common.base.Preconditions;
11  import com.sun.jersey.api.core.HttpRequestContext;
12  import com.sun.jersey.api.core.HttpResponseContext;
13  
14  import java.lang.reflect.InvocationTargetException;
15  import java.util.Collection;
16  
17  /**
18   * Expands the entity returned from the resource method
19   *
20   * @since 2.0
21   */
22  public class ExpandInterceptor implements ResourceInterceptor {
23      private final EntityExpanderResolver expanderResolver;
24      private final String expandParameterName;
25      private final Collection<? extends AdditionalExpandsProvider> additionalExpandsProviders;
26  
27      public ExpandInterceptor(EntityExpanderResolver expanderResolver, Collection<? extends AdditionalExpandsProvider> additionalExpandsProviders) {
28          this("expand", expanderResolver, additionalExpandsProviders);
29      }
30  
31      public ExpandInterceptor(
32              String expandParameterName,
33              EntityExpanderResolver expanderResolver,
34              Collection<? extends AdditionalExpandsProvider> additionalExpandsProviders) {
35          this.expanderResolver = expanderResolver;
36          this.expandParameterName = Preconditions.checkNotNull(expandParameterName);
37          this.additionalExpandsProviders = additionalExpandsProviders;
38      }
39  
40      public void intercept(MethodInvocation invocation) throws IllegalAccessException, InvocationTargetException {
41          invocation.invoke();
42          HttpRequestContext request = invocation.getHttpContext().getRequest();
43          HttpResponseContext response = invocation.getHttpContext().getResponse();
44          final ExpandParameter expandParameter = new DefaultExpandParameter(request.getQueryParameters().get(expandParameterName));
45          new EntityCrawler(additionalExpandsProviders).crawl(response.getEntity(), expandParameter, expanderResolver);
46      }
47  }