View Javadoc

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