View Javadoc

1   package com.atlassian.plugin.osgi.external;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.PluginParseException;
5   import com.atlassian.plugin.hostcontainer.HostContainer;
6   import com.google.common.collect.ImmutableSet;
7   
8   import java.util.Set;
9   
10  /**
11   * A single module descriptor factory for plugins to use when they want to expose just one plugin.  Uses
12   * {@link HostContainer} to optionally provide autowiring for new descriptor instances.
13   *
14   * @since 2.1
15   */
16  public class SingleModuleDescriptorFactory<T extends ModuleDescriptor> implements ListableModuleDescriptorFactory
17  {
18      private final String type;
19      private final Class<T> moduleDescriptorClass;
20      private final HostContainer hostContainer;
21  
22      /**
23       * Constructs an instance using a specific host container
24       *
25       * @param hostContainer The host container to use to create descriptor instances
26       * @param type The type of module
27       * @param moduleDescriptorClass The descriptor class
28       * @since 2.2.0
29       */
30      public SingleModuleDescriptorFactory(final HostContainer hostContainer, final String type, final Class<T> moduleDescriptorClass)
31      {
32          this.moduleDescriptorClass = moduleDescriptorClass;
33          this.type = type;
34          this.hostContainer = hostContainer;
35      }
36  
37      @Override
38      public ModuleDescriptor getModuleDescriptor(final String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
39      {
40          T result = null;
41          if (this.type.equals(type))
42          {
43              result = hostContainer.create(moduleDescriptorClass);
44          }
45          return result;
46      }
47  
48      @Override
49      public boolean hasModuleDescriptor(final String type)
50      {
51          return (this.type.equals(type));
52      }
53  
54      @Override
55      public Class<? extends ModuleDescriptor> getModuleDescriptorClass(final String type)
56      {
57          return (this.type.equals(type) ? moduleDescriptorClass : null);
58      }
59  
60      /**
61       * @since 3.0.0
62       */
63      @Override
64      public Iterable<String> getModuleDescriptorKeys()
65      {
66          return ImmutableSet.of(type);
67      }
68  
69      @Override
70      public Set<Class<? extends ModuleDescriptor>> getModuleDescriptorClasses()
71      {
72          return ImmutableSet.<Class<? extends ModuleDescriptor>>of(moduleDescriptorClass);
73      }
74  
75      public HostContainer getHostContainer()
76      {
77          return hostContainer;
78      }
79  }