Author: oheger Date: Sat Apr 19 08:14:21 2008 New Revision: 649825 URL: http://svn.apache.org/viewvc?rev=649825&view=rev Log: Added new constructor that takes a Preferences node. Some javadoc improvements.
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/PreferencesConfiguration.java commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestPreferencesConfiguration.java Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/PreferencesConfiguration.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/PreferencesConfiguration.java?rev=649825&r1=649824&r2=649825&view=diff ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/PreferencesConfiguration.java (original) +++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/PreferencesConfiguration.java Sat Apr 19 08:14:21 2008 @@ -45,6 +45,8 @@ * <li>the user root node</li> * <li>a system node corresponding to a specific package</li> * <li>a user node corresponding to a specific package</li> + * <li>alternatively a specific <code>Preferences</code> node can be passed to + * a constructor, which will become the new root node.</li> * </ul> * This corresponds to the static factory methods provided by the * <code>Preferences</code> class. It is also possible to change this node @@ -56,8 +58,22 @@ * interface can be used for interacting with <code>Preferences</code> nodes. * Note however that some features provided by the <code>Configuration</code> * interface are not supported by the <code>Preferences</code> API. One - * example of such a feature is the support for multiple values for a property. + * example of such a feature is the support for multiple values for a property: + * If you call <code>addProperty()</code> multiple times with the same key, only + * the last value will be stored. * </p> + * <p> + * The values stored in the underlying <code>Preferences</code> nodes can be + * accessed per default using the dot notation that is also used by other + * <code>Configuration</code> implementations (e.g. + * <code>config.getString("path.to.property.name");</code>). Internally the + * property values are mapped to <em>attribute</em> nodes in this hierarchical + * configuration. The [EMAIL PROTECTED] ExpressionEngine} used by this class hides this + * fact by defining the dot as both property delimiter and attribute marker. If + * another expression engine is set or if this configuration is added to a + * combined configuration, the keys have to be adapted, for instance - when + * using the default expression engine: + * <code>config.getString("[EMAIL PROTECTED]");</code></p> * * @author Oliver Heger * @version $Id$ @@ -126,6 +142,24 @@ setExpressionEngine(setUpExpressionEngine()); setAssociatedClass(c); setSystem(system); + } + + /** + * Creates a new instance of <code>PreferencesConfiguration</code> and + * initializes it with the given node. This node will become the new root + * node. + * + * @param rootNode the root node (must not be <b>null</b>) + * @throws IllegalArgumentException if the passed in node is <b>null</b> + */ + public PreferencesConfiguration(Preferences rootNode) + { + this(false, null); + if (rootNode == null) + { + throw new IllegalArgumentException("Root node must be null!"); + } + root = rootNode; } /** Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestPreferencesConfiguration.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestPreferencesConfiguration.java?rev=649825&r1=649824&r2=649825&view=diff ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestPreferencesConfiguration.java (original) +++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestPreferencesConfiguration.java Sat Apr 19 08:14:21 2008 @@ -123,9 +123,9 @@ */ private PreferencesConfiguration setUpTestConfig() { - node = Preferences.systemNodeForPackage(getClass()); + node = Preferences.userNodeForPackage(getClass()); setUpTestData(); - return new PreferencesConfiguration(true, getClass()); + return new PreferencesConfiguration(false, getClass()); } /** @@ -169,6 +169,34 @@ { PreferencesConfiguration config = setUpTestConfig(); checkProperties(config); + } + + /** + * Tests setting a specific node as root node. + */ + public void testGetPropertiesSpecificNode() + { + node = Preferences.userNodeForPackage(getClass()); + setUpTestData(); + PreferencesConfiguration config = new PreferencesConfiguration(node); + checkProperties(config); + } + + /** + * Tests creating a configuration with a null node. This should cause an + * exception. + */ + public void testInitNullNode() + { + try + { + new PreferencesConfiguration((Preferences) null); + fail("Could create instance with null node!"); + } + catch (IllegalArgumentException iex) + { + // ok + } } /**