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 2013/05/10 21:15:05 UTC

svn commit: r1481151 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/ test/java/org/apache/commons/configuration/

Author: oheger
Date: Fri May 10 19:15:05 2013
New Revision: 1481151

URL: http://svn.apache.org/r1481151
Log:
Configuration interface now extends SynchronizerSupport.

Implementations of the interface methods are provided by AbstractConfiguration.

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/Configuration.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.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=1481151&r1=1481150&r2=1481151&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 Fri May 10 19:15:05 2013
@@ -37,6 +37,7 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
 import org.apache.commons.configuration.interpol.InterpolatorSpecification;
 import org.apache.commons.configuration.interpol.Lookup;
+import org.apache.commons.configuration.sync.LockMode;
 import org.apache.commons.configuration.sync.NoOpSynchronizer;
 import org.apache.commons.configuration.sync.Synchronizer;
 import org.apache.commons.lang.BooleanUtils;
@@ -604,6 +605,53 @@ public abstract class AbstractConfigurat
     }
 
     /**
+     * {@inheritDoc} This implementation delegates to {@code beginRead()} or
+     * {@code beginWrite()}, depending on the {@code LockMode} argument.
+     * Subclasses can override these protected methods to perform additional
+     * steps when a configuration is locked.
+     *
+     * @since 2.0
+     * @throws NullPointerException if the argument is <b>null</b>
+     */
+    public final void lock(LockMode mode)
+    {
+        switch (mode)
+        {
+        case READ:
+            beginRead();
+            break;
+        case WRITE:
+            beginWrite();
+            break;
+        default:
+            throw new IllegalArgumentException("Unsupported LockMode: " + mode);
+        }
+    }
+
+    /**
+     * {@inheritDoc} This implementation delegates to {@code endRead()} or
+     * {@code endWrite()}, depending on the {@code LockMode} argument.
+     * Subclasses can override these protected methods to perform additional
+     * steps when a configuration's lock is released.
+     *
+     * @throws NullPointerException if the argument is <b>null</b>
+     */
+    public final void unlock(LockMode mode)
+    {
+        switch (mode)
+        {
+        case READ:
+            endRead();
+            break;
+        case WRITE:
+            endWrite();
+            break;
+        default:
+            throw new IllegalArgumentException("Unsupported LockMode: " + mode);
+        }
+    }
+
+    /**
      * Notifies this configuration's {@link Synchronizer} that a read operation
      * is about to start. This method is called by all methods which access this
      * configuration in a read-only mode. Subclasses may override it to perform

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java?rev=1481151&r1=1481150&r2=1481151&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java Fri May 10 19:15:05 2013
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
 import org.apache.commons.configuration.interpol.Lookup;
+import org.apache.commons.configuration.sync.SynchronizerSupport;
 
 
 /**
@@ -55,7 +56,7 @@ import org.apache.commons.configuration.
  * @author Commons Configuration team
  * @version $Id$
  */
-public interface Configuration extends ImmutableConfiguration
+public interface Configuration extends ImmutableConfiguration, SynchronizerSupport
 {
     /**
      * Return a decorator Configuration containing every key from the current

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java?rev=1481151&r1=1481150&r2=1481151&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java Fri May 10 19:15:05 2013
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTru
 
 import org.apache.commons.configuration.SynchronizerTestImpl.Methods;
 import org.apache.commons.configuration.io.FileHandler;
+import org.apache.commons.configuration.sync.LockMode;
 import org.apache.commons.configuration.sync.NoOpSynchronizer;
 import org.junit.Before;
 import org.junit.Test;
@@ -68,6 +69,55 @@ public class TestAbstractConfigurationSy
     }
 
     /**
+     * Tests whether a read lock can be obtained.
+     */
+    @Test
+    public void testLockRead()
+    {
+        config.lock(LockMode.READ);
+        sync.verify(Methods.BEGIN_READ);
+    }
+
+    /**
+     * Tests whether a write lock can be obtained.
+     */
+    @Test
+    public void testLockWrite()
+    {
+        config.lock(LockMode.WRITE);
+        sync.verify(Methods.BEGIN_WRITE);
+    }
+
+    /**
+     * Tests lock() with a null argument.
+     */
+    @Test(expected = NullPointerException.class)
+    public void testLockNull()
+    {
+        config.lock(null);
+    }
+
+    /**
+     * Tests whether a read lock can be released.
+     */
+    @Test
+    public void testUnlockRead()
+    {
+        config.unlock(LockMode.READ);
+        sync.verify(Methods.END_READ);
+    }
+
+    /**
+     * Tests whether a write lock can be released.
+     */
+    @Test
+    public void testUnlockWrite()
+    {
+        config.unlock(LockMode.WRITE);
+        sync.verify(Methods.END_WRITE);
+    }
+
+    /**
      * Tests the correct synchronization of addProperty().
      */
     @Test