View Javadoc

1   package com.atlassian.plugin.refimpl;
2   
3   import com.atlassian.plugin.descriptors.servlet.ServletModuleManager;
4   import com.atlassian.plugin.descriptors.servlet.ServletModuleDescriptor;
5   import com.atlassian.plugin.osgi.container.OsgiContainerManager;
6   import com.atlassian.plugin.osgi.container.PackageScannerConfiguration;
7   import com.atlassian.plugin.osgi.container.impl.DefaultPackageScannerConfiguration;
8   import com.atlassian.plugin.osgi.container.felix.FelixOsgiContainerManager;
9   import com.atlassian.plugin.osgi.loader.OsgiPluginLoader;
10  import com.atlassian.plugin.osgi.loader.BundledOsgiPluginLoader;
11  import com.atlassian.plugin.osgi.hostcomponents.HostComponentProvider;
12  import com.atlassian.plugin.osgi.hostcomponents.ComponentRegistrar;
13  import com.atlassian.plugin.*;
14  import com.atlassian.plugin.event.PluginEventManager;
15  import com.atlassian.plugin.event.impl.PluginEventManagerImpl;
16  import com.atlassian.plugin.refimpl.servlet.SimpleServletModuleDescriptor;
17  import com.atlassian.plugin.loaders.DefaultPluginFactory;
18  import com.atlassian.plugin.store.MemoryPluginStateStore;
19  
20  import javax.servlet.ServletContext;
21  import java.io.File;
22  import java.util.Arrays;
23  
24  /**
25   * Created by IntelliJ IDEA.
26   * User: mrdon
27   * Date: 06/07/2008
28   * Time: 12:29:42 PM
29   * To change this template use File | Settings | File Templates.
30   */
31  public class ContainerManager {
32  
33      private final ServletModuleManager servletModuleManager;
34      private final OsgiContainerManager osgiContainerManager;
35      private final DefaultPluginManager pluginManager;
36      private final PluginEventManager pluginEventManager;
37      private final HostComponentProvider hostComponentProvider;
38      private final DefaultModuleDescriptorFactory moduleDescriptorFactory;
39  
40      private static ContainerManager instance;
41  
42      public ContainerManager(ServletContext servletContext) {
43          instance = this;
44          servletModuleManager = new ServletModuleManager();
45  
46          PackageScannerConfiguration scannerConfig = new DefaultPackageScannerConfiguration();
47          osgiContainerManager = new FelixOsgiContainerManager(new File(servletContext.getRealPath("/WEB-INF/framework-bundles")),
48                                                               scannerConfig);
49  
50          hostComponentProvider = new SimpleHostComponentProvider();
51          OsgiPluginLoader osgiPluginLoader = new OsgiPluginLoader(
52                  new File(servletContext.getRealPath("/WEB-INF/plugins")),
53                  PluginManager.PLUGIN_DESCRIPTOR_FILENAME,
54                  new DefaultPluginFactory(),
55                  osgiContainerManager,
56                  hostComponentProvider);
57  
58          BundledOsgiPluginLoader bundledPluginLoader = new BundledOsgiPluginLoader(
59                  getClass().getResource("/atlassian-bundled-plugins.zip"),
60                  new File(servletContext.getRealPath("/WEB-INF/bundled-plugins")),
61                  PluginManager.PLUGIN_DESCRIPTOR_FILENAME,
62                  new DefaultPluginFactory(),
63                  osgiContainerManager,
64                  hostComponentProvider);
65          moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
66          moduleDescriptorFactory.addModuleDescriptor("servlet", SimpleServletModuleDescriptor.class);
67          pluginEventManager = new PluginEventManagerImpl();
68          pluginManager = new DefaultPluginManager(new MemoryPluginStateStore(), Arrays.asList(bundledPluginLoader, osgiPluginLoader),
69                  moduleDescriptorFactory, pluginEventManager);
70          try {
71              pluginManager.init();
72          } catch (PluginParseException e) {
73              e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
74          }
75  
76      }
77  
78      public static synchronized void setInstance(ContainerManager mgr) {
79          instance = mgr;
80      }
81  
82      public static synchronized ContainerManager getInstance() {
83          return instance;
84      }
85  
86      public ServletModuleManager getServletModuleManager() {
87          return servletModuleManager;
88      }
89  
90      public OsgiContainerManager getOsgiContainerManager() {
91          return osgiContainerManager;
92      }
93  
94      public PluginManager getPluginManager() {
95          return pluginManager;
96      }
97  
98      public HostComponentProvider getHostComponentProvider() {
99          return hostComponentProvider;
100     }
101 
102     public ModuleDescriptorFactory getModuleDescriptorFactory() {
103         return moduleDescriptorFactory;
104     }
105 
106     private class SimpleHostComponentProvider implements HostComponentProvider {
107 
108         public void provide(ComponentRegistrar componentRegistrar) {
109             componentRegistrar.register(PluginManager.class, PluginAccessor.class, PluginController.class).forInstance(pluginManager).withName("pluginManager");
110             componentRegistrar.register(PluginEventManager.class).forInstance(pluginEventManager).withName("pluginEventManager");
111         }
112     }
113 }