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
19
20
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 }