1 package com.atlassian.plugins.codegen;
2
3 import java.util.*;
4
5 import com.atlassian.plugins.codegen.annotations.DependencyDescriptor;
6 import com.atlassian.plugins.codegen.modules.PluginModuleCreator;
7 import com.atlassian.plugins.codegen.modules.PluginModuleCreatorRegistry;
8
9
10
11
12 public class PluginModuleCreatorRegistryImpl implements PluginModuleCreatorRegistry
13 {
14
15 private final Map<String, SortedMap<Class, PluginModuleCreator>> creatorRegistry;
16 private final Map<Class, List<DependencyDescriptor>> creatorDependencyMap;
17
18 public PluginModuleCreatorRegistryImpl()
19 {
20 ModuleNameComparator comparator = new ModuleNameComparator();
21 this.creatorRegistry = new HashMap<String, SortedMap<Class, PluginModuleCreator>>();
22 creatorRegistry.put(PluginModuleCreatorRegistry.JIRA, new TreeMap<Class, PluginModuleCreator>(comparator));
23 creatorRegistry.put(PluginModuleCreatorRegistry.BAMBOO, new TreeMap<Class, PluginModuleCreator>(comparator));
24 creatorRegistry.put(PluginModuleCreatorRegistry.CONFLUENCE, new TreeMap<Class, PluginModuleCreator>(comparator));
25 creatorRegistry.put(PluginModuleCreatorRegistry.CROWD, new TreeMap<Class, PluginModuleCreator>(comparator));
26 creatorRegistry.put(PluginModuleCreatorRegistry.FECRU, new TreeMap<Class, PluginModuleCreator>(comparator));
27 creatorRegistry.put(PluginModuleCreatorRegistry.REFAPP, new TreeMap<Class, PluginModuleCreator>(comparator));
28
29 this.creatorDependencyMap = new HashMap<Class, List<DependencyDescriptor>>();
30 }
31
32 @Override
33 public void registerModuleCreator(String productId, PluginModuleCreator moduleCreator)
34 {
35 Map<Class, PluginModuleCreator> moduleMap = creatorRegistry.get(productId);
36 if (null != moduleMap)
37 {
38 moduleMap.put(moduleCreator.getClass(), moduleCreator);
39 }
40 }
41
42 @Override
43 public <T extends PluginModuleCreator> T getModuleCreator(String productId, Class<T> creatorClass)
44 {
45 Map<Class, PluginModuleCreator> moduleMap = creatorRegistry.get(productId);
46 T creator = null;
47 if (null != moduleMap)
48 {
49 creator = creatorClass.cast(moduleMap.get(creatorClass));
50 }
51
52 return creator;
53 }
54
55 @Override
56 public Map<Class, PluginModuleCreator> getModuleCreatorsForProduct(String productId)
57 {
58 SortedMap<Class, PluginModuleCreator> moduleMap = creatorRegistry.get(productId);
59 if (null != moduleMap)
60 {
61 moduleMap = Collections.unmodifiableSortedMap(moduleMap);
62 }
63
64 return moduleMap;
65 }
66
67 @Override
68 public void registerModuleCreatorDependencies(Class creatorClass, List<DependencyDescriptor> dependencies)
69 {
70 creatorDependencyMap.put(creatorClass, dependencies);
71 }
72
73 @Override
74 public List<DependencyDescriptor> getDependenciesForCreatorClass(Class creatorClass)
75 {
76 if (!creatorDependencyMap.containsKey(creatorClass) || creatorDependencyMap.get(creatorClass)
77 .isEmpty())
78 {
79 return new ArrayList<DependencyDescriptor>();
80 }
81
82 return creatorDependencyMap.get(creatorClass);
83 }
84
85 private class ModuleNameComparator implements Comparator<Class>
86 {
87 @Override
88 public int compare(Class class1, Class class2)
89 {
90 return class1.getSimpleName()
91 .compareTo(class2.getSimpleName());
92 }
93 }
94 }