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