Author: oheger
Date: Sun Mar  3 21:17:21 2013
New Revision: 1452122

URL: http://svn.apache.org/r1452122
Log:
[CONFIGURATION-527] Made AbstractConfiguration.clearPropertyDirect() abstract.
This caused some adaptations of other configuration classes.

Modified:
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/JNDIConfiguration.java
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/NonCloneableConfiguration.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDataConfiguration.java

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -616,15 +616,11 @@ public abstract class AbstractConfigurat
     /**
      * Removes the specified property from this configuration. This method is
      * called by {@code clearProperty()} after it has done some
-     * preparations. It should be overridden in sub classes. This base
-     * implementation is just left empty.
+     * preparations. It must be overridden in sub classes.
      *
      * @param key the key to be removed
      */
-    protected void clearPropertyDirect(String key)
-    {
-        // override in sub classes
-    }
+    protected abstract void clearPropertyDirect(String key);
 
     public void clear()
     {

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -843,17 +843,14 @@ public class BaseHierarchicalConfigurati
      * @param key the key of the property to be removed
      */
     @Override
-    public void clearProperty(String key)
+    protected void clearPropertyDirect(String key)
     {
-        fireEvent(EVENT_CLEAR_PROPERTY, key, null, true);
         List<ConfigurationNode> nodes = fetchNodeList(key);
 
         for (ConfigurationNode node : nodes)
         {
             clearNode(node);
         }
-
-        fireEvent(EVENT_CLEAR_PROPERTY, key, null, false);
     }
 
     /**

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -164,6 +164,19 @@ public class DataConfiguration extends A
     }
 
     @Override
+    protected void clearPropertyDirect(String key)
+    {
+        if (configuration instanceof AbstractConfiguration)
+        {
+            ((AbstractConfiguration) configuration).clearPropertyDirect(key);
+        }
+        else
+        {
+            configuration.clearProperty(key);
+        }
+    }
+
+    @Override
     public void setProperty(String key, Object value)
     {
         configuration.setProperty(key, value);

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/JNDIConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/JNDIConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/JNDIConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/JNDIConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -332,7 +332,7 @@ public class JNDIConfiguration extends A
      * @param key the key of the property to remove
      */
     @Override
-    public void clearProperty(String key)
+    protected void clearPropertyDirect(String key)
     {
         clearedProperties.add(key);
     }

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/web/BaseWebConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -71,7 +71,7 @@ abstract class BaseWebConfiguration exte
      * allowed
      */
     @Override
-    public void clearProperty(String key)
+    protected void clearPropertyDirect(String key)
     {
         throw new UnsupportedOperationException("Read only configuration");
     }

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/NonCloneableConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/NonCloneableConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/NonCloneableConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/NonCloneableConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -67,4 +67,9 @@ public class NonCloneableConfiguration e
     {
         return null;
     }
+
+    @Override
+    protected void clearPropertyDirect(String key)
+    {
+    }
 }

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDataConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDataConfiguration.java?rev=1452122&r1=1452121&r2=1452122&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDataConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDataConfiguration.java
 Sun Mar  3 21:17:21 2013
@@ -42,6 +42,7 @@ import java.util.NoSuchElementException;
 import junitx.framework.ArrayAssert;
 import junitx.framework.ListAssert;
 
+import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -2399,4 +2400,44 @@ public class TestDataConfiguration
         conf.addProperty(key, value);
         assertEquals("Wrong result", value, conf.get(String.class, key));
     }
+
+    /**
+     * Tests whether properties can be cleared.
+     */
+    @Test
+    public void testClearProperty()
+    {
+        String key = "test.property";
+        conf.addProperty(key, "someValue");
+        conf.clearProperty(key);
+        assertFalse("Property still found", conf.containsKey(key));
+    }
+
+    /**
+     * Tests the implementation of clearPropertyDirect().
+     */
+    @Test
+    public void testClearPropertyDirect()
+    {
+        String key = "test.property";
+        conf.addProperty(key, "someValue");
+        conf.clearPropertyDirect(key);
+        assertFalse("Property still found", conf.containsKey(key));
+    }
+
+    /**
+     * Tests clearPropertyDirect() if the wrapped configuration does not extend
+     * AbstractConfiguration.
+     */
+    @Test
+    public void testClearPropertyDirectNoAbstractConf()
+    {
+        Configuration wrapped = EasyMock.createMock(Configuration.class);
+        String key = "test.property";
+        wrapped.clearProperty(key);
+        EasyMock.replay(wrapped);
+        conf = new DataConfiguration(wrapped);
+        conf.clearPropertyDirect(key);
+        EasyMock.verify(wrapped);
+    }
 }


Reply via email to