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