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
11
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 }