1 package org.naftulin.configmgr;
2
3 import java.util.Map;
4
5 public class ConfigurationUtility {
6
7 /***
8 * Looks up configuration by configuration key. Assumes that configuration is of type
9 * Map (property file, database key/value pairs, external configuration stored as Map)
10 * and looks at value in the map based on property key. Returns value found as Boolean.
11 * @param configurationKey
12 * @param propertyKey
13 * @return value in configuration map based on configuration key and property key.
14 * @exception IllegalArgumentException if configuration based on configuration key is not
15 * found; or if configuration is found, but is not of type Map, or if Map found
16 * does not contain value under property key.
17 */
18 public static Boolean getBoolean(final String configurationKey, final String propertyKey) {
19 return (Boolean) Boolean.valueOf(getString(configurationKey, propertyKey));
20 }
21
22 /***
23 * Looks up configuration by configuration key. Assumes that configuration is of type
24 * Map (property file, database key/value pairs, external configuration stored as Map)
25 * and looks at value in the map based on property key. Returns value found as Character.
26 * @param configurationKey
27 * @param propertyKey
28 * @return value in configuration map based on configuration key and property key.
29 * @exception IllegalArgumentException if configuration based on configuration key is not
30 * found; or if configuration is found, but is not of type Map, or if Map found
31 * does not contain value under property key, or if value stored is cannot be parsed to
32 * specified type.
33 */
34 public static Character getCharacter(final String configurationKey, final String propertyKey) {
35 final String s = getString(configurationKey, propertyKey);
36 if (s.length() == 0) {
37 throw new IllegalArgumentException("Found configuration "+ configurationKey +
38 " and entry " + propertyKey + " but property value retrieved is of lenth 0, which is not a chatracter");
39 }
40 return (Character) Character.valueOf(s.charAt(0));
41 }
42
43 /***
44 * Looks up configuration by configuration key. Assumes that configuration is of type
45 * Map (property file, database key/value pairs, external configuration stored as Map)
46 * and looks at value in the map based on property key. Returns value found as Double.
47 * @param configurationKey
48 * @param propertyKey
49 * @return value in configuration map based on configuration key and property key.
50 * @exception IllegalArgumentException if configuration based on configuration key is not
51 * found; or if configuration is found, but is not of type Map, or if Map found
52 * does not contain value under property key, or if value stored is cannot be parsed to
53 * specified type.
54 */
55 public static Double getDouble(final String configurationKey, final String propertyKey) {
56 Double value;
57 final String propertyValue = getString(configurationKey, propertyKey);
58 try {
59 value = (Double) Double.parseDouble(propertyValue);
60 } catch(NumberFormatException e) {
61 throw new IllegalArgumentException("Found configuration "+ configurationKey +
62 " and entry " + propertyKey + " but property value + " + propertyValue + " retrieved is not double.");
63 }
64 return value;
65 }
66
67 /***
68 * Looks up configuration by configuration key. Assumes that configuration is of type
69 * Map (property file, database key/value pairs, external configuration stored as Map)
70 * and looks at value in the map based on property key. Returns value found as Float.
71 * @param configurationKey
72 * @param propertyKey
73 * @return value in configuration map based on configuration key and property key.
74 * @exception IllegalArgumentException if configuration based on configuration key is not
75 * found; or if configuration is found, but is not of type Map, or if Map found
76 * does not contain value under property key, or if value stored is cannot be parsed to
77 * specified type.
78 */
79 public static Float getFloat(final String configurationKey, final String propertyKey) {
80 Float value;
81 final String propertyValue = getString(configurationKey, propertyKey);
82 try {
83 value = (Float) Float.parseFloat(propertyValue);
84 } catch(NumberFormatException e) {
85 throw new IllegalArgumentException("Found configuration "+ configurationKey +
86 " and entry " + propertyKey + " but property value + " + propertyValue + " retrieved is not float.");
87 }
88 return value;
89 }
90
91 /***
92 * Looks up configuration by configuration key. Assumes that configuration is of type
93 * Map (property file, database key/value pairs, external configuration stored as Map)
94 * and looks at value in the map based on property key. Returns value found as Integer.
95 * @param configurationKey
96 * @param propertyKey
97 * @return value in configuration map based on configuration key and property key.
98 * @exception IllegalArgumentException if configuration based on configuration key is not
99 * found; or if configuration is found, but is not of type Map, or if Map found
100 * does not contain value under property key, or if value stored is cannot be parsed to
101 * specified type.
102 */
103 public static Integer getInteger(final String configurationKey, final String propertyKey) {
104 Integer value;
105 final String propertyValue = getString(configurationKey, propertyKey);
106 try {
107 value = (Integer) Integer.parseInt(propertyValue);
108 } catch(NumberFormatException e) {
109 throw new IllegalArgumentException("Found configuration "+ configurationKey +
110 " and entry " + propertyKey + " but property value " + propertyValue + " retrieved is not integer.");
111 }
112 return value;
113 }
114
115 /***
116 * Looks up configuration by configuration key. Assumes that configuration is of type
117 * Map (property file, database key/value pairs, external configuration stored as Map)
118 * and looks at value in the map based on property key. Returns value found as Long.
119 * @param configurationKey
120 * @param propertyKey
121 * @return value in configuration map based on configuration key and property key.
122 * @exception IllegalArgumentException if configuration based on configuration key is not
123 * found; or if configuration is found, but is not of type Map, or if Map found
124 * does not contain value under property key, or if value stored is cannot be parsed to
125 * specified type.
126 */
127 public static Long getLong(final String configurationKey, final String propertyKey) {
128 Long value;
129 final String propertyValue = getString(configurationKey, propertyKey);
130 try {
131 value = (Long) Long.parseLong(propertyValue);
132 } catch(NumberFormatException e) {
133 throw new IllegalArgumentException("Found configuration "+ configurationKey +
134 " and entry " + propertyKey + " but property value + " + propertyValue + " retrieved is not long value.");
135 }
136 return value;
137 }
138
139 /***
140 * Looks up configuration by configuration key. Assumes that configuration is of type
141 * Map (property file, database key/value pairs, external configuration stored as Map)
142 * and looks at value in the map based on property key. Returns value found as Short.
143 * @param configurationKey
144 * @param propertyKey
145 * @return value in configuration map based on configuration key and property key.
146 * @exception IllegalArgumentException if configuration based on configuration key is not
147 * found; or if configuration is found, but is not of type Map, or if Map found
148 * does not contain value under property key, or if value stored is cannot be parsed to
149 * specified type.
150 */
151 public static Short getShort(final String configurationKey, final String propertyKey) {
152 Short value;
153 final String propertyValue = getString(configurationKey, propertyKey);
154 try {
155 value = (Short) Short.parseShort(propertyValue);
156 } catch(NumberFormatException e) {
157 throw new IllegalArgumentException("Found configuration "+ configurationKey +
158 " and entry " + propertyKey + " but property value + " + propertyValue + " retrieved is not short value.");
159 }
160 return value;
161 }
162
163 /***
164 * Looks up configuration by configuration key. Assumes that configuration is of type
165 * Map (property file, database key/value pairs, external configuration stored as Map)
166 * and looks at value in the map based on property key. Returns value found as String.
167 * @param configurationKey
168 * @param propertyKey
169 * @return value in configuration map based on configuration key and property key.
170 * @exception IllegalArgumentException if configuration based on configuration key is not
171 * found; or if configuration is found, but is not of type Map, or if Map found
172 * does not contain value under property key.
173 */
174 public static String getString(final String configurationKey, final String propertyKey) {
175 return (String) getObject(configurationKey, propertyKey);
176 }
177
178 /***
179 * Looks up configuration by configuration key. Assumes that configuration is of type
180 * Map (property file, database key/value pairs, external configuration stored as Map)
181 * and looks at value in the map based on property key. Returns value found as Object.
182 * @param configurationKey
183 * @param propertyKey
184 * @return value in configuration map based on configuration key and property key.
185 * @exception IllegalArgumentException if configuration based on configuration key is not
186 * found; or if configuration is found, but is not of type Map, or if Map found
187 * does not contain value under property key.
188 */
189 public static Object getObject(final String configurationKey, final String propertyKey) {
190 final Object configurationEntry = ConfigurationUtilityHelper.getObject(configurationKey, propertyKey);
191
192 validateEntryIsMap(configurationKey, configurationEntry);
193 final Object o = ((Map) configurationEntry).get(propertyKey);
194 if (o == null) {
195 throw new IllegalArgumentException("Configuration with by key " + configurationKey + " was found, " +
196 " configuration entry " + configurationEntry + " was found, but proptery key " +
197 propertyKey + " was not found in configuration entry.");
198 }
199 return ((Map) configurationEntry).get(propertyKey);
200 }
201
202 /***
203 * Looks up configuration by configuration key, and returns value stored under that configuration. For example,
204 * for property file, Properties would be returned; for XML - parsed and typed xml object would be returned; for
205 * LDAP - the object that was stored in LDAP would be returned.
206 * @param configurationKey
207 * @param propertyKey
208 * @return value in configuration map based on configuration key and property key.
209 * @exception IllegalArgumentException if configuration based on configuration key is not
210 * found.
211 */
212 public static Object getObject(final String configurationKey) {
213 return ConfigurationUtilityHelper.getObject(configurationKey);
214 }
215
216 /***
217 * Returns configuration management engine object. If the object was not created yet,
218 * this call will create it.
219 * @return configuration management engine object.
220 * @throws ConfigurationManagerRuntimeException if an error occurred while creating a configuration
221 * management object.
222 */
223 public static ConfigurationManagement getConfigurationManagement() {
224 return ConfigurationUtilityHelper.getConfigurationManagement();
225 }
226
227 public static void reload() {
228 ConfigurationUtilityHelper.reload();
229 }
230 /***
231 * Returns configuration manager. If the manager was not created yet, this call
232 * will create it.
233 * @return configuration manager.
234 * @throws ConfigurationManagerRuntimeException if an error occurs while creating a configuration
235 * manager.
236 */
237 public static ConfigurationManager getConfigurationManager() {
238 return ConfigurationUtilityHelper.getConfigurationManager();
239 }
240
241 private static void validateEntryIsMap(final String configurationKey,
242 final Object configurationEntry) {
243 if (!(configurationEntry instanceof Map)) {
244 throw new IllegalArgumentException("Configuration with by key " + configurationKey + " was found, but it is of type " +
245 configurationEntry.getClass().getName() +" not of Map type. " +
246 "Only Map typed entry content (Property, JNDI Database or Direct Database by default) can be used. ");
247 }
248 }
249
250
251
252 }