View Javadoc

1   package com.atlassian.plugin.descriptors;
2   
3   import com.atlassian.plugin.ModuleDescriptorFactory;
4   import com.atlassian.plugin.ModuleDescriptor;
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(ModuleDescriptorFactory... factories)
16      {
17          this.factories = factories;
18      }
19  
20      public ModuleDescriptor getModuleDescriptor(String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
21      {
22          ModuleDescriptor descriptor = null;
23          for (ModuleDescriptorFactory factory : factories)
24          {
25              if (factory.hasModuleDescriptor(type))
26              {
27                  descriptor = factory.getModuleDescriptor(type);
28                  break;
29              }
30          }
31          return descriptor;
32      }
33  
34      public boolean hasModuleDescriptor(String type)
35      {
36          boolean found = false;
37          for (ModuleDescriptorFactory factory : factories)
38          {
39              if (factory.hasModuleDescriptor(type))
40              {
41                  found = true;
42                  break;
43              }
44          }
45          return found;
46      }
47  
48      public Class<? extends ModuleDescriptor> getModuleDescriptorClass(String type)
49      {
50          Class<? extends ModuleDescriptor> descriptorClass = null;
51          for (ModuleDescriptorFactory factory : factories)
52          {
53              descriptorClass = factory.getModuleDescriptorClass(type);
54              if (descriptorClass != null)
55                  break;
56          }
57          return descriptorClass;
58      }
59  }