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
17
18
19
20 public class ExpandInterceptor implements ResourceInterceptor
21 {
22 private final EntityExpanderResolver expanderResolver;
23 private final String expandParameterName;
24
25 public ExpandInterceptor(EntityExpanderResolver expanderResolver)
26 {
27 this("expand", expanderResolver);
28 }
29
30 public ExpandInterceptor(String expandParameterName, EntityExpanderResolver expanderResolver)
31 {
32 this.expanderResolver = expanderResolver;
33 this.expandParameterName = Preconditions.checkNotNull(expandParameterName);
34 }
35
36 public void intercept(MethodInvocation invocation) throws IllegalAccessException, InvocationTargetException
37 {
38 invocation.invoke();
39 HttpRequestContext request = invocation.getHttpContext().getRequest();
40 HttpResponseContext response = invocation.getHttpContext().getResponse();
41 final ExpandParameter expandParameter = new DefaultExpandParameter(request.getQueryParameters().get(expandParameterName));
42 new EntityCrawler().crawl(response.getEntity(), expandParameter, expanderResolver);
43 }
44 }