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 private final BundleContext bundleContext;
18 private final ServiceReference serviceReference;
19
20 OsgiServiceReferenceResourceFilterFactory(final BundleContext bundleContext, final ServiceReference serviceReference) {
21 this.bundleContext = Preconditions.checkNotNull(bundleContext);
22 this.serviceReference = Preconditions.checkNotNull(serviceReference);
23 }
24
25 public List<ResourceFilter> create(final AbstractMethod am) {
26 final ResourceFilterFactory resourceFilterFactory;
27 try {
28 resourceFilterFactory = (ResourceFilterFactory) bundleContext.getService(serviceReference);
29 } catch (ClassCastException e) {
30 throw new IllegalStateException("The service registered should be an instance of " + ResourceFilterFactory.class, e);
31 }
32
33 return resourceFilterFactory != null ? resourceFilterFactory.create(am) : Collections.<ResourceFilter>emptyList();
34 }
35 }