1 package com.atlassian.plugin.osgi.external;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.PluginParseException;
5 import com.atlassian.plugin.hostcontainer.HostContainer;
6 import com.google.common.collect.ImmutableSet;
7
8 import java.util.Set;
9
10
11
12
13
14
15
16 public class SingleModuleDescriptorFactory<T extends ModuleDescriptor> implements ListableModuleDescriptorFactory
17 {
18 private final String type;
19 private final Class<T> moduleDescriptorClass;
20 private final HostContainer hostContainer;
21
22
23
24
25
26
27
28
29
30 public SingleModuleDescriptorFactory(final HostContainer hostContainer, final String type, final Class<T> moduleDescriptorClass)
31 {
32 this.moduleDescriptorClass = moduleDescriptorClass;
33 this.type = type;
34 this.hostContainer = hostContainer;
35 }
36
37 @Override
38 public ModuleDescriptor getModuleDescriptor(final String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
39 {
40 T result = null;
41 if (this.type.equals(type))
42 {
43 result = hostContainer.create(moduleDescriptorClass);
44 }
45 return result;
46 }
47
48 @Override
49 public boolean hasModuleDescriptor(final String type)
50 {
51 return (this.type.equals(type));
52 }
53
54 @Override
55 public Class<? extends ModuleDescriptor> getModuleDescriptorClass(final String type)
56 {
57 return (this.type.equals(type) ? moduleDescriptorClass : null);
58 }
59
60
61
62
63 @Override
64 public Iterable<String> getModuleDescriptorKeys()
65 {
66 return ImmutableSet.of(type);
67 }
68
69 @Override
70 public Set<Class<? extends ModuleDescriptor>> getModuleDescriptorClasses()
71 {
72 return ImmutableSet.<Class<? extends ModuleDescriptor>>of(moduleDescriptorClass);
73 }
74
75 public HostContainer getHostContainer()
76 {
77 return hostContainer;
78 }
79 }