View Javadoc

1   package org.naftulin.configmgr;
2   
3   /***
4    * A factory that creates and maintains configuration management engine and configuration manager.
5    * 
6    * @author Henry Naftulin
7    * @since 1.0
8    */
9   public class ConfigurationManagerFactory {
10  	private static String configurationFile = "config.xml";
11  	private static ConfigurationManagement management;
12  	private static ConfigurationManager manager;
13  	
14  	/***
15  	 * Package private constructor, needed to access clear method. Only used
16  	 * for unit testing.
17  	 */
18  	ConfigurationManagerFactory() {}
19  	
20  	public static synchronized boolean isIniialized() {
21  		return management != null;
22  	}
23  	/***
24  	 * Sets a file from which master configuration would be read. 
25  	 * By default, the file is 'config.xml', but it could be owervritten by using this API.
26  	 * Only valid before configuration management is initialized, otherwise throws an exception.
27  	 * @param configFile the configuration file for master record.
28  	 * @throws ConfigurationManagerException if a configuration management engine is already initiazed.
29  	 */
30  	public static synchronized void setConfigurationFile(final String configFile) throws ConfigurationManagerException {
31  		if (management != null) {
32  			throw new ConfigurationManagerException("Configuration Manager already initialize");
33  		}
34  		configurationFile = configFile;
35  	}
36  	
37  	/***
38  	 * Returns configuration management engine object. If the object was not created yet,
39  	 * this call will create it.
40  	 * @return configuration management engine object.
41  	 * @throws ConfigurationManagerException if an error occured while creating a configuration
42  	 * managment object.
43  	 */
44  	public static synchronized ConfigurationManagement getConfigurationManagement() throws ConfigurationManagerException {
45  		if (management == null) {
46  			management = new ConfigurationManagementImpl(configurationFile);
47  			management.reload();
48  		}
49  		return management;
50  	}
51  	
52  	/***
53  	 * Returns configuration manager. If the manager was not created yet, this call
54  	 * will create it.
55  	 * @return configuration manager.
56  	 * @throws ConfigurationManagerException if an error occurs while creating a configuration
57  	 * manager.
58  	 */
59  	public static synchronized ConfigurationManager getConfigurationManager() throws ConfigurationManagerException {
60  		if (manager == null) {
61  			manager = getConfigurationManagement().getConfigurationManager();
62  		}
63  		return manager;
64  	}	
65  	
66  	/***
67  	 * Clears the factory: resets configuration management, configuration manager and configuration file. 
68  	 * Needed for unit test settings only.
69  	 */
70  	static void clear() {
71  		synchronized(ConfigurationManagerFactory.class) {
72  			ConfigurationManagerFactory.management = null;
73  			ConfigurationManagerFactory.manager = null;
74  			ConfigurationManagerFactory.configurationFile = "config.xml";
75  		}
76  	}
77  }