View Javadoc

1   package com.atlassian.plugins.rest.module.jersey;
2   
3   import com.atlassian.plugin.AutowireCapablePlugin;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.PluginAccessor;
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  {
14      private final PluginAccessor pluginAccessor;
15      private final NonMarshallingRequestFactory requestFactory;
16  
17      public JerseyRequestFactoryServiceFactory(PluginAccessor pluginAccessor, NonMarshallingRequestFactory requestFactory)
18      {
19          this.pluginAccessor = pluginAccessor;
20          this.requestFactory = requestFactory;
21      }
22  
23      public Object getService(final Bundle bundle, final ServiceRegistration serviceRegistration)
24      {
25          final Plugin plugin = pluginAccessor.getPlugin(OsgiHeaderUtil.getPluginKey(bundle));
26  
27          if (!(plugin instanceof AutowireCapablePlugin))
28          {
29              throw new IllegalStateException("Can't create RequestFactory for non OsgiPlugin");
30          }
31          else
32          {
33              return new JerseyRequestFactory(requestFactory, plugin, bundle);
34          }
35      }
36  
37      public void ungetService(final Bundle bundle, final ServiceRegistration serviceRegistration, final Object o)
38      {
39          ((JerseyRequestFactory) o).destroy();
40      }
41  }