View Javadoc

1   package com.atlassian.plugin.schema.impl;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.PluginParseException;
5   import com.atlassian.plugin.osgi.factory.OsgiPlugin;
6   import com.atlassian.plugin.schema.descriptor.DescribedModuleDescriptorFactory;
7   import com.atlassian.plugin.schema.spi.Schema;
8   import com.atlassian.plugin.schema.spi.SchemaFactory;
9   
10  import java.util.Collections;
11  import java.util.Set;
12  
13  import static com.google.common.base.Preconditions.*;
14  import static java.util.Collections.*;
15  
16  /**
17   * Described module descriptor factory for internal use
18   */
19  class DefaultDescribedModuleDescriptorFactory<T extends ModuleDescriptor<?>> implements DescribedModuleDescriptorFactory
20  {
21      private final OsgiPlugin plugin;
22      private final String type;
23      private final Iterable<String> typeList;
24      private final Class<T> moduleDescriptorClass;
25      private final SchemaFactory schemaFactory;
26  
27      /**
28       * Constructs an instance using a specific host container
29       *
30       * @param type The type of module
31       * @param moduleDescriptorClass The descriptor class
32       * @param schemaFactory
33       * @since 2.2.0
34       */
35      DefaultDescribedModuleDescriptorFactory(OsgiPlugin plugin,
36                                              final String type,
37                                              final Class<T> moduleDescriptorClass,
38                                              SchemaFactory schemaFactory)
39      {
40          this.plugin = checkNotNull(plugin);
41          this.moduleDescriptorClass = moduleDescriptorClass;
42          this.type = type;
43          this.schemaFactory = schemaFactory;
44          this.typeList = singleton(type);
45      }
46  
47      public ModuleDescriptor getModuleDescriptor(final String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
48      {
49          T result = null;
50          if (this.type.equals(type))
51          {
52              result = plugin.autowire(moduleDescriptorClass);
53  //            result = (T) hostContainer.create(moduleDescriptorClass);
54          }
55          return result;
56      }
57  
58      public boolean hasModuleDescriptor(final String type)
59      {
60          return (this.type.equals(type));
61      }
62  
63      @Override
64      public Iterable<String> getModuleDescriptorKeys()
65      {
66          return typeList;
67      }
68  
69      @Override
70      public Schema getSchema(String type)
71      {
72          return (this.type.equals(type) ? schemaFactory.getSchema() : null);
73      }
74  
75      @SuppressWarnings("unchecked")
76      public Class<? extends ModuleDescriptor<?>> getModuleDescriptorClass(final String type)
77      {
78          return (this.type.equals(type) ? moduleDescriptorClass : null);
79      }
80  
81      @SuppressWarnings("unchecked")
82      public Set<Class<ModuleDescriptor<?>>> getModuleDescriptorClasses()
83      {
84          return Collections.singleton((Class<ModuleDescriptor<?>>) moduleDescriptorClass);
85      }
86  }