1 package org.naftulin.configmgr;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.apache.commons.lang.builder.EqualsBuilder;
7 import org.apache.commons.lang.builder.HashCodeBuilder;
8 import org.apache.log4j.Logger;
9
10 public class ConfigurationUtilityHelper {
11 private static final String JUNIT_WARNING = ">>Configuration Managment System in JUNit Mode<<";
12
13 private static final Logger log = Logger.getLogger(ConfigurationUtilityHelper.class);
14
15 private static boolean unitTest = false;
16 private static final Map<String, Object> configObjects = new HashMap<String, Object>();
17 private static final Map<ConfigPropertyKey, Object> configPropertyObjects = new HashMap<ConfigPropertyKey, Object>();
18
19 public static void setUnitTest(final boolean unitTestDesired) { unitTest =unitTestDesired; }
20 public static boolean getUnitTest() { return unitTest; }
21 public static void setConfigEntryObject(final String configurationKey, final Object object) {
22 if (!unitTest) {
23 throw new IllegalStateException("Cannot set configuration entry, the state is not unit test. Please set the state to unittest first.");
24 }
25
26 printJUnitModeWarning();
27
28 configObjects.put(configurationKey, object);
29 }
30 private static void printJUnitModeWarning() {
31 System.out.println(JUNIT_WARNING);
32 log.warn(JUNIT_WARNING);
33 }
34
35 public static void setConfigPropertyObject(final String configurationKey, final String propertyKey, final String value) {
36 if (!unitTest) {
37 throw new IllegalStateException("Cannot set configuration property, the state is not unit test. Please set the state to unittest first.");
38 }
39 printJUnitModeWarning();
40 configPropertyObjects.put(new ConfigurationUtilityHelper.ConfigPropertyKey(configurationKey, propertyKey), value);
41 }
42
43
44 static Object getObject(final String configurationKey) {
45 Object configurationEntryObject= null;
46 if (unitTest) {
47 printJUnitModeWarning();
48 configurationEntryObject = configObjects.get(configurationKey);
49 } else {
50 ConfigurationManager cm = null;
51 cm = getConfigurationManager();
52
53 configurationEntryObject = getConfigurationEntry(configurationKey, cm);
54 }
55
56 return configurationEntryObject;
57
58 }
59
60 public static Object getObject(final String configurationKey, final String propertyKey) {
61 Object configurationEntryObject= null;
62 if (unitTest) {
63 printJUnitModeWarning();
64 Object value = configPropertyObjects.get(new ConfigurationUtilityHelper.ConfigPropertyKey(configurationKey, propertyKey));
65 Map<String, Object> m = new HashMap<String, Object>();
66 m.put(propertyKey, value);
67 configurationEntryObject = m;
68 } else {
69 configurationEntryObject = getObject(configurationKey);
70 }
71 return configurationEntryObject;
72 }
73
74 static Object getConfigurationEntry(final String configurationKey,
75 final ConfigurationManager cm) {
76 final Object configurationEntry = cm.getConfigurationSilent(configurationKey);
77 if (configurationEntry == null) {
78 throw new IllegalArgumentException("Configuration with by key " + configurationKey + " not found. ");
79 }
80 return configurationEntry;
81 }
82
83 static ConfigurationManager getConfigurationManager() {
84 ConfigurationManager cm;
85 try {
86 cm = ConfigurationManagerFactory.getConfigurationManager();
87 } catch(ConfigurationManagerException e) {
88 throw new ConfigurationManagerRuntimeException(e.getMessage(), e);
89 }
90 return cm;
91 }
92
93 static ConfigurationManagement getConfigurationManagement() {
94 ConfigurationManagement cm;
95 try {
96 cm = ConfigurationManagerFactory.getConfigurationManagement();
97 } catch(ConfigurationManagerException e) {
98 throw new ConfigurationManagerRuntimeException(e.getMessage(), e);
99 }
100 return cm;
101 }
102
103 public static void reload() {
104 if (unitTest) {
105 printJUnitModeWarning();
106
107 } else {
108 try {
109 ConfigurationManagement management = ConfigurationManagerFactory.getConfigurationManagement();
110 management.reload();
111 } catch(ConfigurationManagerException e) {
112 throw new ConfigurationManagerRuntimeException(e.getMessage(), e);
113 }
114 }
115 }
116
117 private static class ConfigPropertyKey {
118 final String configKey;
119 final String propertyKey;
120
121 ConfigPropertyKey(String configKey, String propertyKey) {
122 this.configKey = configKey;
123 this.propertyKey = propertyKey;
124 }
125
126 public int hashCode() {
127 return HashCodeBuilder.reflectionHashCode(this);
128 }
129
130 public boolean equals(Object that) {
131 return EqualsBuilder.reflectionEquals(this, that);
132 }
133
134 }
135
136
137 }