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.
*/