View Javadoc

1   package org.ocltf.common;
2   
3   import java.util.Iterator;
4   
5   import org.apache.commons.configuration.ClassPropertiesConfiguration;
6   import org.apache.commons.lang.StringUtils;
7   import org.apache.commons.logging.Log;
8   import org.apache.commons.logging.LogFactory;
9   import org.ocltf.utils.ExceptionUtils;
10  
11  /***
12   * Finds and loads Configuration objects
13   * 
14   * @author Chad Brandon
15   */
16  public class Configuration {
17  
18  	private static Log logger = LogFactory.getLog(Configuration.class);
19  	
20  	/***
21  	 * Where all configuration files will be found.
22  	 */
23  	private static final String CONFIGURATION_DIR = "META-INF/configuration/";
24  
25  	/***
26  	 * The underlying configuration object.
27  	 */
28  	private ClassPropertiesConfiguration config;
29  
30  	/***
31  	 * The path to the configuration file
32  	 */
33  	private String path;
34  
35  	/***
36  	 * Returns an instance of this Configuration for the
37  	 * specified forClass
38  	 * @param forClass
39  	 * @return Configuration
40  	 */
41  	public static Configuration getInstance(Class forClass) {
42  		return new Configuration(forClass);		
43  	}
44  	
45  	/***
46  	 * The private constuctor which creates the underlying config.
47  	 * 
48  	 * @param forClass
49  	 */
50  	private Configuration(Class forClass) {
51  		String methodName = "Configuration";
52  		ExceptionUtils.checkNull(methodName, "forClass", forClass);		
53  		String resource = findPath(forClass);
54  		try {
55  			this.config = 
56  				new ClassPropertiesConfiguration(forClass, resource);
57  			this.path = resource;
58  		} catch (Exception ex) {
59  			String errMsg = "Could not find configuration resource --> " + resource;
60  			logger.error(errMsg, ex);
61  			throw new ConfigurationException(errMsg, ex);
62  		}		
63  	}
64  	
65  	/***
66  	 * Returns the path to the configuration file
67  	 * @param forClass the Class which the Configuration path is for.
68  	 * @return String
69  	 */
70  	public String findPath(Class forClass) {
71  		String methodName = "findPath";
72  		ExceptionUtils.checkNull(methodName, "clazz", forClass);
73  		return CONFIGURATION_DIR + forClass.getName();
74  	}
75  	
76  	/***
77  	 * Retrieves the property as a String
78  	 * @param key the key for the property
79  	 * @return String the value of the property or null if it can't be found.
80  	 */
81  	public String getOptionalString(String key) {
82  		String property = null;
83  		key = StringUtils.trimToEmpty(key);
84  		if (StringUtils.isNotEmpty(key)) {
85  			property = config.getString(key);
86  		}
87  		return property;
88  	}
89  	
90  	/***
91  	 * Retrieves the property has a array of Strings
92  	 * @param key the key for the property
93  	 * @return String the value of the property or null if it can't be found.
94  	 */
95  	public String[] getOptionalStringArray(String key) {
96  		String[] properties = null;
97  		key = StringUtils.trimToEmpty(key);
98  		if (StringUtils.isNotEmpty(key)) {
99  			properties = config.getStringArray(key);
100 		}
101 		return properties;
102 	}
103 	
104 	/***
105 	 * Retrieves the property has a array of Strings
106 	 * @param key the key for the property
107 	 * @return String the value of the property or null if it can't be found.
108 	 */
109 	public String[] getRequiredStringArray(String key) {
110 		String methodName = "getOptionalStringArray";
111 		String[] properties = null;
112 		key = StringUtils.trimToEmpty(key);
113 		if (StringUtils.isNotEmpty(key)) {
114 			properties = config.getStringArray(key);
115 		}
116 		if (properties == null || properties.length == 0) {
117 			throw new ConfigurationException(methodName 
118 				+ " the configuration property '" 
119 				+ key 
120 				+ " can not be found (or has no corresponding values),"
121 				+ " please check the configuration file --> " + this.getPath());			
122 		}
123 		return properties;
124 	}
125 	
126 	/***
127 	 * Retrieves the property has a string.  Will
128 	 * throw the runtime ConfigurationException
129 	 * if the property can not be found.
130 	 * @param key
131 	 * @return String 
132 	 */
133 	public String getRequiredString(String key) {
134 		String methodName = "getRequiredString";
135 		String property = this.getOptionalString(key);
136 		if (StringUtils.isEmpty(property)) {
137 			throw new ConfigurationException(methodName 
138 				+ " the configuration property '" 
139 				+ key 
140 				+ " can not be found (or has no corresponding value),"
141 				+ " please check the configuration file --> " + this.getPath());
142 		}
143 		return property;
144 	}
145 	
146 	/***
147 	 * Get the list of the keys contained in the configuration 
148 	 * repository that match the specified prefix. 
149 	 * @param prefix the prefix to look for.
150 	 * @return Iterator
151 	 */
152 	public Iterator getKeys(String prefix) {
153 		return this.config.getKeys(prefix);
154 	}
155 	
156 	/***
157 	 * Get the list of the keys contained in the configuration repository.
158 	 * @return Iterator
159 	 */
160 	public Iterator getKeys() {
161 		return this.config.getKeys();
162 	}
163 	
164 	/***
165 	 * Returns the path to the file for this Configuration
166 	 * @return String
167 	 */
168 	public String getPath() {
169 		return this.path;
170 	}
171 
172 }