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