View Javadoc
1   package com.atlassian.plugin.osgi.bridge;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginAccessor;
5   import com.atlassian.plugin.osgi.bridge.external.PluginRetrievalService;
6   import org.osgi.framework.Bundle;
7   import org.osgi.framework.ServiceFactory;
8   import org.osgi.framework.ServiceRegistration;
9   
10  /**
11   * Provides instances of {@link com.atlassian.plugin.osgi.bridge.external.PluginRetrievalService}, tailed for the consumer.
12   *
13   * @since 2.6.0
14   */
15  public class PluginRetrievalServiceFactory implements ServiceFactory {
16      private final PluginAccessor pluginAccessor;
17  
18      public PluginRetrievalServiceFactory(PluginAccessor pluginAccessor) {
19          this.pluginAccessor = pluginAccessor;
20      }
21  
22      public Object getService(Bundle bundle, ServiceRegistration serviceRegistration) {
23          return new PluginRetrievalServiceImpl(pluginAccessor, bundle);
24      }
25  
26      public void ungetService(Bundle bundle, ServiceRegistration serviceRegistration, Object o) {
27      }
28  
29      private static class PluginRetrievalServiceImpl implements PluginRetrievalService {
30          private final Plugin plugin;
31  
32          public PluginRetrievalServiceImpl(PluginAccessor pluginAccessor, Bundle bundle) {
33              String pluginKey = PluginBundleUtils.getPluginKey(bundle);
34              plugin = pluginAccessor.getPlugin(pluginKey);
35          }
36  
37          public Plugin getPlugin() {
38              return plugin;
39          }
40      }
41  }