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.STASH, new TreeMap<Class, PluginModuleCreator>(comparator));
31 creatorRegistry.put(PluginModuleCreatorRegistry.REFAPP, new TreeMap<Class, PluginModuleCreator>(comparator));
32 }
33
34 @Override
35 public void registerModuleCreator(String productId, PluginModuleCreator moduleCreator)
36 {
37 Map<Class, PluginModuleCreator> moduleMap = creatorRegistry.get(productId);
38 if (null != moduleMap)
39 {
40 moduleMap.put(moduleCreator.getClass(), moduleCreator);
41 }
42 }
43
44 @Override
45 public <T extends PluginModuleCreator> T getModuleCreator(String productId, Class<T> creatorClass)
46 {
47 Map<Class, PluginModuleCreator> moduleMap = creatorRegistry.get(productId);
48 T creator = null;
49 if (null != moduleMap)
50 {
51 creator = creatorClass.cast(moduleMap.get(creatorClass));
52 }
53
54 return creator;
55 }
56
57 @Override
58 public Map<Class, PluginModuleCreator> getModuleCreatorsForProduct(String productId)
59 {
60 SortedMap<Class, PluginModuleCreator> moduleMap = creatorRegistry.get(productId);
61 if (null != moduleMap)
62 {
63 moduleMap = Collections.unmodifiableSortedMap(moduleMap);
64 }
65
66 return moduleMap;
67 }
68
69 private class ModuleNameComparator implements Comparator<Class>
70 {
71 @Override
72 public int compare(Class class1, Class class2)
73 {
74 return class1.getSimpleName()
75 .compareTo(class2.getSimpleName());
76 }
77 }
78 }