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 }