View Javadoc

1   package com.atlassian.plugins.rest.module.jersey;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginAccessor;
5   import com.atlassian.plugin.module.ContainerManagedPlugin;
6   import com.atlassian.plugin.osgi.util.OsgiHeaderUtil;
7   import com.atlassian.sal.api.net.NonMarshallingRequestFactory;
8   import org.osgi.framework.Bundle;
9   import org.osgi.framework.ServiceFactory;
10  import org.osgi.framework.ServiceRegistration;
11  
12  public class JerseyRequestFactoryServiceFactory implements ServiceFactory {
13      private final PluginAccessor pluginAccessor;
14      private final NonMarshallingRequestFactory requestFactory;
15  
16      public JerseyRequestFactoryServiceFactory(PluginAccessor pluginAccessor, NonMarshallingRequestFactory requestFactory) {
17          this.pluginAccessor = pluginAccessor;
18          this.requestFactory = requestFactory;
19      }
20  
21      public Object getService(final Bundle bundle, final ServiceRegistration serviceRegistration) {
22          final Plugin plugin = pluginAccessor.getPlugin(OsgiHeaderUtil.getPluginKey(bundle));
23  
24          if (!(plugin instanceof ContainerManagedPlugin)) {
25              throw new IllegalStateException("Can't create RequestFactory for plugin " + plugin + " " + plugin.getClass().getCanonicalName() + " as it is not a ContainerManagedPlugin");
26          } else {
27              return new JerseyRequestFactory(requestFactory, plugin, bundle);
28          }
29      }
30  
31      public void ungetService(final Bundle bundle, final ServiceRegistration serviceRegistration, final Object o) {
32          ((JerseyRequestFactory) o).destroy();
33      }
34  }