1 package com.atlassian.plugin.schema.impl;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.PluginParseException;
5 import com.atlassian.plugin.osgi.factory.OsgiPlugin;
6 import com.atlassian.plugin.schema.descriptor.DescribedModuleDescriptorFactory;
7 import com.atlassian.plugin.schema.spi.Schema;
8 import com.atlassian.plugin.schema.spi.SchemaFactory;
9
10 import java.util.Collections;
11 import java.util.Set;
12
13 import static com.google.common.base.Preconditions.*;
14 import static java.util.Collections.*;
15
16
17
18
19 class DefaultDescribedModuleDescriptorFactory<T extends ModuleDescriptor<?>> implements DescribedModuleDescriptorFactory
20 {
21 private final OsgiPlugin plugin;
22 private final String type;
23 private final Iterable<String> typeList;
24 private final Class<T> moduleDescriptorClass;
25 private final SchemaFactory schemaFactory;
26
27
28
29
30
31
32
33
34
35 DefaultDescribedModuleDescriptorFactory(OsgiPlugin plugin,
36 final String type,
37 final Class<T> moduleDescriptorClass,
38 SchemaFactory schemaFactory)
39 {
40 this.plugin = checkNotNull(plugin);
41 this.moduleDescriptorClass = moduleDescriptorClass;
42 this.type = type;
43 this.schemaFactory = schemaFactory;
44 this.typeList = singleton(type);
45 }
46
47 public ModuleDescriptor getModuleDescriptor(final String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
48 {
49 T result = null;
50 if (this.type.equals(type))
51 {
52 result = plugin.autowire(moduleDescriptorClass);
53
54 }
55 return result;
56 }
57
58 public boolean hasModuleDescriptor(final String type)
59 {
60 return (this.type.equals(type));
61 }
62
63 @Override
64 public Iterable<String> getModuleDescriptorKeys()
65 {
66 return typeList;
67 }
68
69 @Override
70 public Schema getSchema(String type)
71 {
72 return (this.type.equals(type) ? schemaFactory.getSchema() : null);
73 }
74
75 @SuppressWarnings("unchecked")
76 public Class<? extends ModuleDescriptor<?>> getModuleDescriptorClass(final String type)
77 {
78 return (this.type.equals(type) ? moduleDescriptorClass : null);
79 }
80
81 @SuppressWarnings("unchecked")
82 public Set<Class<ModuleDescriptor<?>>> getModuleDescriptorClasses()
83 {
84 return Collections.singleton((Class<ModuleDescriptor<?>>) moduleDescriptorClass);
85 }
86 }