1 package com.sourceforge.jpatterns.core.configuration; 2 3 import java.io.Serializable; 4 import java.util.Set; 5 6 /** 7 * This interface defines the methods would be used later for the working with the configuration functionality defined at the properties. 8 * <br/> 9 * The <code>com.sourceforge.jpatterns.core.configuration.PropertiesBasedFactory</code> class contains the getter returning the 10 * implementation of the <code>IPropertiesManager</code>. It is the single place where the configuration specifying which implementation 11 * of the interface should be used is configured at the Java Sources. All the configuration settings necessary for implementing the 12 * "factory" pattern is placed at the properties file, and then the JPatterns built-in pattern "factory" and xml configuration is used 13 * later for retrieving the implementations of the interfaces. 14 * <br/> 15 * Please review <code>com.sourceforge.jpatterns.core.configuration.PropertiesBasedFactory#getPropertiesManager()</code> 16 * <br/> 17 * Please review properly the following Java Docs - it is important for understanding of the algorithm of working of the JPatterns 18 * configuration functionality. 19 * {@link com.sourceforge.jpatterns.core.configuration.PropertiesProvider.JPProperties.USE_ONLY_CUSTOM_FRAMEWORK_PROPERTIES} 20 * 21 * todo [zmicer]: not sure if all these methods should take place here (e.g. getDefaultBundle etc) 22 * 23 * $Author:: zmicer $<br/> 24 * $Rev:: 67 $<br/> * $Date:: 2007-08-28 21:37:07 #$<br/> 25 * $Date:: 2007-08-28 21:37:07 #$<br/> 26 */ 27 public interface IPropertiesManager extends Serializable 28 { 29 /** 30 * @return true if the custom resource bundle is presents at the class path 31 */ 32 boolean customConfigPresents(); 33 34 /** 35 * @return true if the default config resource bundle is presents at the class path 36 */ 37 boolean defaultConfigPresents(); 38 39 /** 40 * This method returns the value of the props signing if custom properties file totally overrides the default, and if it is present, 41 * then the values from the default properties are not used at all. 42 * <br/> 43 * Please review properly the following Java Docs - it is important for understanding of the algorithm of working of the JPatterns 44 * configuration functionality. 45 * {@link com.sourceforge.jpatterns.core.configuration.PropertiesProvider.JPProperties.USE_ONLY_CUSTOM_FRAMEWORK_PROPERTIES} 46 * 47 * @return true if the approrpiate property is set to the true, false otherwise. 48 */ 49 boolean useOnlyCustomConfigIfPresent(); 50 51 /** 52 * Return the bundle value using the ResourceBundle already retrieved. This method analyzes two bundles - default and custom one, 53 * the priority has custom - it provides the user with the possibility to override the values defined at the default properties, 54 * and it is a good customization point for the framework. 55 * <br/> 56 * 57 * @param key for the value we need. Can not be null (otherwise <code>IllegalArgumentException</code> would appear). 58 * 59 * @return the value for this bundle or just null in the case there is not defined bundles with such name 60 */ 61 String getBundle(final String key); 62 63 /** 64 * Get bundle for the provided key - it is a class. The shorten name is used - Serializable, PropertiesManagerImpl etc. - without packaging 65 * 66 * @param key for the value we need, Class object. Can not be null (otherwise <code>IllegalArgumentException</code> would appear). 67 * 68 * @return the value for this bundle or just null in the case there is not defined bundles with such name 69 */ 70 String getBundle(final Class key); 71 72 /** 73 * Get bundled object by the key provided. We would obtain the full class name using this key, and then try to instantiate the object. 74 * In the case value for the this key is null, or object can not be instantiated the <code>JPConfigException</code> 75 * would appear. 76 * 77 * @param key the class for which we should obtain appropriate implementation (usually it is class of the interface of abstract class 78 * implementation of which we would obtain.) 79 * @return the Object which was instantiated (following the Java Docs above we would throw the JPConfigException exception in 80 * the case the key was not found or the object can not be instantiated.) 81 */ 82 Object getBundledObject(final Class key); 83 84 /** 85 * Get bundled object by the String key provided. We would obtain the full class name using this key, and then try to instantiate 86 * the object. In the case value for the this key is null, or object can not be instantiated the 87 * <code>JPConfigException</code> would appear. 88 * 89 * @param key the class for which we should obtain appropriate implementation (usually it is String - base name of the interface of 90 * abstract class implementation of which we would obtain.) 91 * @return the Object which was instantiated (following the Java Docs above we would throw the JPConfigException exception in 92 * the case the key was not found or the object can not be instantiated.) 93 */ 94 Object getBundledObject(final String key); 95 96 /** 97 * Get the value from the default bundle. this was provided in any case - potentially it could be used at the unit tests etc. 98 * <br/> 99 * Please be noticed that we should check if the default configuration presents before the getting the value. The absence of the default 100 * configuration is a failure for the JPatterns framework. 101 * 102 * @param key to be processed. Can not be null (otherwise <code>IllegalArgumentException</code> would appear). 103 * 104 * @return String, the value required 105 */ 106 String getDefaultBundle(final String key); 107 108 /** 109 * Get the value from the custom bundle. this was provided in any case - potentially it could be used at the unit tests etc. 110 * <br/> 111 * Please be noticed that we should check if the custom configuration presents before the getting the value. 112 * The absence of the custom configuration is a normal behavioral of the system. 113 * 114 * @param key to be processed. Can not be null (otherwise <code>IllegalArgumentException</code> would appear). 115 * 116 * @return String, the value required 117 */ 118 String getCustomBundle(final String key); 119 120 /** 121 * @return the Enumeration of the keys (merged one or the custom one or the default one - it depends on the following: 122 * a. if custom properties files is present or was specified at the JVM parameter b. study the 123 * <code>com.sourceforge.jpatterns.core.configuration.PropertiesProvider.JPProperties.USE_ONLY_CUSTOM_FRAMEWORK_PROPERTIES</code>) 124 */ 125 Set<String> getMergedKeys(); 126 }