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