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 }