View Javadoc

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