View Javadoc

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   * A resource filter factory that takes care of looking up the underlying {@link ResourceFilterFactory} from the given {@link ServiceReference}
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  }