1 package com.atlassian.plugins.rest.module;
2
3 import com.google.common.base.Preconditions;
4 import com.sun.jersey.api.model.AbstractMethod;
5 import com.sun.jersey.spi.container.ResourceFilter;
6 import com.sun.jersey.spi.container.ResourceFilterFactory;
7 import org.osgi.framework.BundleContext;
8 import org.osgi.framework.ServiceReference;
9
10 import java.util.Collections;
11 import java.util.List;
12
13
14
15
16 class OsgiServiceReferenceResourceFilterFactory implements ResourceFilterFactory
17 {
18 private final BundleContext bundleContext;
19 private final ServiceReference serviceReference;
20
21 OsgiServiceReferenceResourceFilterFactory(final BundleContext bundleContext, final ServiceReference serviceReference)
22 {
23 this.bundleContext = Preconditions.checkNotNull(bundleContext);
24 this.serviceReference = Preconditions.checkNotNull(serviceReference);
25 }
26
27 public List<ResourceFilter> create(final AbstractMethod am)
28 {
29 final ResourceFilterFactory resourceFilterFactory;
30 try
31 {
32 resourceFilterFactory = (ResourceFilterFactory) bundleContext.getService(serviceReference);
33 }
34 catch (ClassCastException e)
35 {
36 throw new IllegalStateException("The service registered should be an instance of " + ResourceFilterFactory.class, e);
37 }
38
39 return resourceFilterFactory != null ? resourceFilterFactory.create(am) : Collections.<ResourceFilter>emptyList();
40 }
41 }