1 package com.atlassian.plugins.rest.common.expand.jersey;
2
3 import com.atlassian.plugins.rest.common.expand.EntityCrawler;
4 import com.atlassian.plugins.rest.common.expand.parameter.DefaultExpandParameter;
5 import com.atlassian.plugins.rest.common.expand.parameter.ExpandParameter;
6 import com.atlassian.plugins.rest.common.expand.resolver.EntityExpanderResolver;
7 import com.google.common.base.Preconditions;
8 import com.sun.jersey.spi.container.ContainerRequest;
9 import com.sun.jersey.spi.container.ContainerResponse;
10 import com.sun.jersey.spi.container.ContainerResponseFilter;
11
12 import javax.ws.rs.ext.Provider;
13
14
15
16
17
18
19 @Provider
20 public class ExpandResponseFilter implements ContainerResponseFilter
21 {
22 private final String expandParameterName;
23 private final EntityExpanderResolver expanderResolver;
24
25 public ExpandResponseFilter(EntityExpanderResolver expanderResolver)
26 {
27 this("expand", expanderResolver);
28 }
29
30 public ExpandResponseFilter(String expandParameterName, EntityExpanderResolver expanderResolver)
31 {
32 this.expanderResolver = expanderResolver;
33 this.expandParameterName = Preconditions.checkNotNull(expandParameterName);
34 }
35
36 public ContainerResponse filter(ContainerRequest request, ContainerResponse response)
37 {
38 final ExpandParameter expandParameter = new DefaultExpandParameter(request.getQueryParameters().get(expandParameterName));
39 new EntityCrawler().crawl(response.getEntity(), expandParameter, expanderResolver);
40 return response;
41 }
42 }