View Javadoc

1   package com.atlassian.plugin.descriptors;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.ModuleDescriptorFactory;
5   import com.atlassian.plugin.PluginParseException;
6   
7   /**
8    * Module descriptor factory that checks multiple factories in sequence.  There is no attempt at caching the results.
9    * @since 2.1
10   */
11  public class ChainModuleDescriptorFactory implements ModuleDescriptorFactory
12  {
13      private final ModuleDescriptorFactory[] factories;
14  
15      public ChainModuleDescriptorFactory(final ModuleDescriptorFactory... factories)
16      {
17          this.factories = factories;
18      }
19  
20      public ModuleDescriptor<?> getModuleDescriptor(final String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
21      {
22          for (final ModuleDescriptorFactory factory : factories)
23          {
24              if (factory.hasModuleDescriptor(type))
25              {
26                  return factory.getModuleDescriptor(type);
27              }
28          }
29          return null;
30      }
31  
32      public boolean hasModuleDescriptor(final String type)
33      {
34          for (final ModuleDescriptorFactory factory : factories)
35          {
36              if (factory.hasModuleDescriptor(type))
37              {
38                  return true;
39              }
40          }
41          return false;
42      }
43  
44      public Class<? extends ModuleDescriptor> getModuleDescriptorClass(final String type)
45      {
46          for (final ModuleDescriptorFactory factory : factories)
47          {
48              final Class<? extends ModuleDescriptor> descriptorClass = factory.getModuleDescriptorClass(type);
49              if (descriptorClass != null)
50              {
51                  return descriptorClass;
52              }
53          }
54          return null;
55      }
56  }