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