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/04/02 21:06:46 UTC
svn commit: r1463688 - in /commons/proper/configuration/trunk/src:
main/java/org/apache/commons/configuration/builder/combined/
test/java/org/apache/commons/configuration/builder/combined/
Author: oheger
Date: Tue Apr 2 19:06:45 2013
New Revision: 1463688
URL: http://svn.apache.org/r1463688
Log:
CombinedConfigurationBuilder now evaluates default parameters for child
configuration sources and initializes child parameter objects correspondingly.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java?rev=1463688&r1=1463687&r2=1463688&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java Tue Apr 2 19:06:45 2013
@@ -27,10 +27,12 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.configuration.CombinedConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.ConfigurationLookup;
+import org.apache.commons.configuration.ConfigurationRuntimeException;
import org.apache.commons.configuration.FileSystem;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.SubnodeConfiguration;
@@ -991,6 +993,8 @@ public class CombinedConfigurationBuilde
*/
protected void initChildBuilderParameters(BuilderParameters params)
{
+ initDefaultChildParameters(params);
+
if (params instanceof BasicBuilderParameters)
{
initChildBasicParameters((BasicBuilderParameters) params);
@@ -1116,6 +1120,29 @@ public class CombinedConfigurationBuilde
}
/**
+ * Copies all matching default parameters for child configuration sources to
+ * the passed in parameters object. This implementation iterates over all
+ * default parameters object of the current combined builder parameters. If
+ * the passed in object is assignment compatible with one of these objects,
+ * all properties are copied.
+ *
+ * @param params the parameters to be initialized
+ * @throws ConfigurationRuntimeException if an error occurs when copying
+ * properties
+ */
+ private void initDefaultChildParameters(BuilderParameters params)
+ {
+ for (BuilderParameters p : currentParameters
+ .getDefaultChildParameters())
+ {
+ if (p.getClass().isInstance(params))
+ {
+ copyProperties(params, p);
+ }
+ }
+ }
+
+ /**
* Initializes basic builder parameters for a child configuration with
* default settings set for this builder. This implementation ensures that
* all {@code Lookup} objects are propagated to child configurations and
@@ -1299,6 +1326,30 @@ public class CombinedConfigurationBuilde
}
/**
+ * Copies all properties from one parameters object to another one. This
+ * method copies all data contained in the parameters map. In addition,
+ * properties with get and set methods are also copied.
+ *
+ * @param dest the destination parameters object
+ * @param src the source parameters object
+ * @throws ConfigurationRuntimeException if an error occurs
+ */
+ private static void copyProperties(BuilderParameters dest,
+ BuilderParameters src)
+ {
+ try
+ {
+ PropertyUtils.copyProperties(dest, src.getParameters());
+ PropertyUtils.copyProperties(dest, src);
+ }
+ catch (Exception e)
+ {
+ // Handle all reflection-related exceptions the same way
+ throw new ConfigurationRuntimeException(e);
+ }
+ }
+
+ /**
* Creates the map with the default configuration builder providers.
*
* @return the map with default providers
Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java?rev=1463688&r1=1463687&r2=1463688&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java Tue Apr 2 19:06:45 2013
@@ -40,6 +40,7 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationAssert;
import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.ConfigurationRuntimeException;
import org.apache.commons.configuration.ConfigurationUtils;
import org.apache.commons.configuration.DefaultFileSystem;
import org.apache.commons.configuration.DynamicCombinedConfiguration;
@@ -54,8 +55,11 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.builder.ConfigurationBuilder;
import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl;
import org.apache.commons.configuration.builder.FileBasedConfigurationBuilder;
+import org.apache.commons.configuration.builder.HierarchicalBuilderParametersImpl;
+import org.apache.commons.configuration.builder.PropertiesBuilderParametersImpl;
import org.apache.commons.configuration.builder.ReloadingFileBasedConfigurationBuilder;
import org.apache.commons.configuration.builder.XMLBuilderParametersImpl;
+import org.apache.commons.configuration.builder.fluent.Parameters;
import org.apache.commons.configuration.event.ConfigurationErrorListener;
import org.apache.commons.configuration.event.ConfigurationListener;
import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
@@ -64,6 +68,7 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.reloading.ReloadingController;
import org.apache.commons.configuration.reloading.ReloadingControllerSupport;
import org.apache.commons.configuration.resolver.CatalogResolver;
+import org.apache.commons.configuration.tree.ExpressionEngine;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;
import org.easymock.EasyMock;
import org.junit.After;
@@ -959,6 +964,78 @@ public class TestCombinedConfigurationBu
}
/**
+ * Tests whether default child properties in the combined builder's
+ * configuration are inherited by child parameter objects.
+ */
+ @Test
+ public void testInitChildBuilderParametersDefaultChildProperties()
+ throws ConfigurationException
+ {
+ final Long defRefresh = 60000L;
+ final Long xmlRefresh = 30000L;
+ builder.configure(Parameters
+ .combined()
+ .setDefinitionBuilderParameters(
+ Parameters.fileBased().setFile(TEST_FILE))
+ .addChildParameters(
+ new FileBasedBuilderParametersImpl()
+ .setReloadingRefreshDelay(defRefresh)
+ .setThrowExceptionOnMissing(true))
+ .addChildParameters(
+ new XMLBuilderParametersImpl()
+ .setValidating(false)
+ .setExpressionEngine(
+ new XPathExpressionEngine())
+ .setReloadingRefreshDelay(xmlRefresh)));
+ builder.getConfiguration();
+ XMLBuilderParametersImpl params = new XMLBuilderParametersImpl();
+ builder.initChildBuilderParameters(params);
+ assertTrue(
+ "Wrong expression engine",
+ params.getParameters().get("expressionEngine") instanceof XPathExpressionEngine);
+ assertEquals("Validating flag not set", Boolean.FALSE, params
+ .getParameters().get("validating"));
+ assertEquals("Wrong XML refresh", xmlRefresh,
+ params.getReloadingRefreshDelay());
+ assertEquals("Basic flag not set", Boolean.TRUE, params.getParameters()
+ .get("throwExceptionOnMissing"));
+
+ PropertiesBuilderParametersImpl params2 =
+ new PropertiesBuilderParametersImpl();
+ builder.initChildBuilderParameters(params2);
+ assertEquals("Wrong default refresh", defRefresh,
+ params2.getReloadingRefreshDelay());
+ }
+
+ /**
+ * Tests whether exceptions on initializing default child properties are
+ * handled.
+ */
+ @Test(expected = ConfigurationRuntimeException.class)
+ public void testInitChildBuilderParametersDefaultChildPropertiesEx()
+ throws ConfigurationException
+ {
+ builder.configure(Parameters
+ .combined()
+ .setDefinitionBuilderParameters(
+ Parameters.fileBased().setFile(TEST_FILE))
+ .addChildParameters(
+ new HierarchicalBuilderParametersImpl()
+ .setExpressionEngine(new XPathExpressionEngine())));
+ builder.getConfiguration();
+ XMLBuilderParametersImpl params = new XMLBuilderParametersImpl()
+ {
+ @Override
+ public HierarchicalBuilderParametersImpl setExpressionEngine(
+ ExpressionEngine engine)
+ {
+ throw new ConfigurationRuntimeException("Test exception");
+ }
+ };
+ builder.initChildBuilderParameters(params);
+ }
+
+ /**
* Tests whether a Lookup object can be declared in the definition
* configuration.
*/