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 2014/05/24 15:53:53 UTC

svn commit: r1597290 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java test/java/org/apache/commons/configuration/builder/TestBasicConfigurationBuilder.java

Author: oheger
Date: Sat May 24 13:53:53 2014
New Revision: 1597290

URL: http://svn.apache.org/r1597290
Log:
Added connectToReloadingController() to BasicConfigurationBuilder.

This method allows enabling reloading facilities to an arbitrary configuration
builder.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicConfigurationBuilder.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java?rev=1597290&r1=1597289&r2=1597290&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java Sat May 24 13:53:53 2014
@@ -37,6 +37,7 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.event.EventType;
 import org.apache.commons.configuration.ex.ConfigurationException;
 import org.apache.commons.configuration.ex.ConfigurationRuntimeException;
+import org.apache.commons.configuration.reloading.ReloadingController;
 
 /**
  * <p>
@@ -432,6 +433,34 @@ public class BasicConfigurationBuilder<T
     }
 
     /**
+     * Connects this builder with a {@code ReloadingController}. With this
+     * method support for reloading can be added to an arbitrary builder object.
+     * Event listeners are registered at the reloading controller and this
+     * builder with connect both objects:
+     * <ul>
+     * <li>When the reloading controller detects that a reload is required, the
+     * builder's {@link #resetResult()} method is called; so the managed result
+     * object is invalidated.</li>
+     * <li>When a new result object has been created the controller's reloading
+     * state is reset, so that new changes can be detected again.</li>
+     * </ul>
+     *
+     * @param controller the {@code ReloadingController} to connect to (must not
+     *        be <b>null</b>)
+     * @throws IllegalArgumentException if the controller is <b>null</b>
+     */
+    public final void connectToReloadingController(
+            ReloadingController controller)
+    {
+        if (controller == null)
+        {
+            throw new IllegalArgumentException(
+                    "ReloadingController must not be null!");
+        }
+        ReloadingBuilderSupportListener.connect(this, controller);
+    }
+
+    /**
      * Creates a new, initialized result object. This method is called by
      * {@code getConfiguration()} if no valid result object exists. This base
      * implementation performs two steps:

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicConfigurationBuilder.java?rev=1597290&r1=1597289&r2=1597290&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicConfigurationBuilder.java Sat May 24 13:53:53 2014
@@ -48,6 +48,8 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.event.ConfigurationListener;
 import org.apache.commons.configuration.ex.ConfigurationException;
 import org.apache.commons.configuration.ex.ConfigurationRuntimeException;
+import org.apache.commons.configuration.reloading.ReloadingController;
+import org.apache.commons.configuration.reloading.ReloadingDetector;
 import org.easymock.EasyMock;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -534,6 +536,43 @@ public class TestBasicConfigurationBuild
     }
 
     /**
+     * Tests whether a builder can be connected to a reloading controller.
+     */
+    @Test
+    public void testConnectToReloadingController()
+            throws ConfigurationException
+    {
+        ReloadingDetector detector =
+                EasyMock.createNiceMock(ReloadingDetector.class);
+        EasyMock.expect(detector.isReloadingRequired()).andReturn(Boolean.TRUE);
+        EasyMock.replay(detector);
+        ReloadingController controller = new ReloadingController(detector);
+        BasicConfigurationBuilder<Configuration> builder =
+                new BasicConfigurationBuilder<Configuration>(
+                        PropertiesConfiguration.class);
+        Configuration configuration = builder.getConfiguration();
+
+        builder.connectToReloadingController(controller);
+        controller.checkForReloading(null);
+        assertTrue("Not in reloading state", controller.isInReloadingState());
+        assertNotSame("No new configuration created", configuration,
+                builder.getConfiguration());
+        assertFalse("Still in reloading state", controller.isInReloadingState());
+    }
+
+    /**
+     * Tries to connect to a null reloading controller.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testConnectToReloadingControllerNull()
+    {
+        BasicConfigurationBuilder<Configuration> builder =
+                new BasicConfigurationBuilder<Configuration>(
+                        PropertiesConfiguration.class);
+        builder.connectToReloadingController(null);
+    }
+
+    /**
      * A test thread class for testing whether the builder's result object can
      * be requested concurrently.
      */