You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2012/09/20 22:15:04 UTC

svn commit: r1388193 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/SubnodeConfiguration.java test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java

Author: oheger
Date: Thu Sep 20 20:15:04 2012
New Revision: 1388193

URL: http://svn.apache.org/viewvc?rev=1388193&view=rev
Log:
[CONFIGURATION-504] Added a new clearAndDetachFromParent() method to SubnodeConfiguration.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/SubnodeConfiguration.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/SubnodeConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/SubnodeConfiguration.java?rev=1388193&r1=1388192&r2=1388193&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/SubnodeConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/SubnodeConfiguration.java Thu Sep 20 20:15:04 2012
@@ -241,6 +241,24 @@ public class SubnodeConfiguration extend
     }
 
     /**
+     * Clears this configuration and removes its root node from the parent
+     * configuration. While a default {@link #clear()} operation just removes
+     * all content from the root node, this method is more radical. It also
+     * removes this configuration's root node from the node structure of its
+     * parent. This means that even if later properties are added to this
+     * {@code SubnodeConfiguration}, they will not be visible in the parent
+     * configuration.
+     *
+     * @since 2.0
+     */
+    public void clearAndDetachFromParent()
+    {
+        clear();
+        setSubnodeKey(null); // always detach
+        getParent().removeNode(getRootNode());
+    }
+
+    /**
      * Returns a hierarchical configuration object for the given sub node.
      * This implementation will ensure that the returned
      * {@code SubnodeConfiguration} object will have the same parent than

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java?rev=1388193&r1=1388192&r2=1388193&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java Thu Sep 20 20:15:04 2012
@@ -597,7 +597,7 @@ public class TestHierarchicalConfigurati
         SubnodeConfiguration sub = config.configurationAt("test.sub");
         assertEquals("Wrong value", "fail", sub.getString("test"));
         sub.clear();
-        assertNull("Key still found", config.getString("test.sub.key"));
+        assertNull("Key still found", config.getString("test.sub.test"));
         sub.setProperty("test", "success");
         assertEquals("Property not set", "success",
                 config.getString("test.sub.test"));
@@ -605,6 +605,23 @@ public class TestHierarchicalConfigurati
     }
 
     /**
+     * Tests whether a {@code SubnodeConfiguration} can be cleared and its root
+     * node can be removed from its parent configuration.
+     */
+    @Test
+    public void testConfigurationAtClearAndDetach()
+    {
+        config.addProperty("test.sub.test", "success");
+        config.addProperty("test.other", "check");
+        SubnodeConfiguration sub = config.configurationAt("test.sub");
+        sub.clearAndDetachFromParent();
+        assertTrue("Sub not empty", sub.isEmpty());
+        assertNull("Key still found", config.getString("test.sub.test"));
+        sub.setProperty("test", "failure!");
+        assertNull("Node not detached", config.getString("test.sub.test"));
+    }
+
+    /**
      * Tests the configurationsAt() method.
      */
     @Test