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/11/29 21:54:32 UTC

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

Author: oheger
Date: Fri Nov 29 20:54:32 2013
New Revision: 1546644

URL: http://svn.apache.org/r1546644
Log:
CombinedConfigurationBuilder now uses default handlers for initializing child sources.

The parameters objects for child configuration sources are now initialized
using the DefaultParametersManager obtained from the builder's configuration.
This replaces the previous mechanism based on example parameters objects.
(The new approach is more flexible and in-line with the global defaults
initialization mechanism.)

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/TestDynamicCombinedConfiguration.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.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=1546644&r1=1546643&r2=1546644&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 Fri Nov 29 20:54:32 2013
@@ -27,7 +27,6 @@ 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;
@@ -46,6 +45,7 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.builder.BuilderListener;
 import org.apache.commons.configuration.builder.BuilderParameters;
 import org.apache.commons.configuration.builder.ConfigurationBuilder;
+import org.apache.commons.configuration.builder.DefaultParametersManager;
 import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl;
 import org.apache.commons.configuration.builder.FileBasedBuilderProperties;
 import org.apache.commons.configuration.builder.FileBasedConfigurationBuilder;
@@ -1132,11 +1132,12 @@ 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.
+     * Executes the {@link DefaultParametersManager} stored in the current
+     * parameters on the passed in parameters object. If default handlers have been
+     * registered for this type of parameters, an initialization is now
+     * performed. This method is called before the parameters object is
+     * initialized from the configuration definition file. So default values
+     * can be overridden later with concrete property definitions.
      *
      * @param params the parameters to be initialized
      * @throws ConfigurationRuntimeException if an error occurs when copying
@@ -1144,14 +1145,8 @@ public class CombinedConfigurationBuilde
      */
     private void initDefaultChildParameters(BuilderParameters params)
     {
-        for (BuilderParameters p : currentParameters
-                .getDefaultChildParameters())
-        {
-            if (p.getClass().isInstance(params))
-            {
-                copyProperties(params, p);
-            }
-        }
+        currentParameters.getChildDefaultParametersManager()
+                .initializeParameters(params);
     }
 
     /**
@@ -1338,30 +1333,6 @@ 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/TestDynamicCombinedConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDynamicCombinedConfiguration.java?rev=1546644&r1=1546643&r2=1546644&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDynamicCombinedConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDynamicCombinedConfiguration.java Fri Nov 29 20:54:32 2013
@@ -35,7 +35,9 @@ import java.util.Random;
 import org.apache.commons.configuration.SynchronizerTestImpl.Methods;
 import org.apache.commons.configuration.builder.BuilderConfigurationWrapperFactory;
 import org.apache.commons.configuration.builder.ConfigurationBuilder;
+import org.apache.commons.configuration.builder.CopyObjectDefaultHandler;
 import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl;
+import org.apache.commons.configuration.builder.FileBasedBuilderProperties;
 import org.apache.commons.configuration.builder.combined.CombinedConfigurationBuilder;
 import org.apache.commons.configuration.builder.combined.MultiFileConfigurationBuilder;
 import org.apache.commons.configuration.builder.combined.ReloadingCombinedConfigurationBuilder;
@@ -353,9 +355,11 @@ public class TestDynamicCombinedConfigur
                 .setDefinitionBuilderParameters(
                         new FileBasedBuilderParametersImpl()
                                 .setFile(MULTI_DYNAMIC_FILE))
-                .addChildParameters(
-                        new FileBasedBuilderParametersImpl()
-                                .setReloadingRefreshDelay(1L)));
+                .registerChildDefaultsHandler(
+                        FileBasedBuilderProperties.class,
+                        new CopyObjectDefaultHandler(
+                                new FileBasedBuilderParametersImpl()
+                                        .setReloadingRefreshDelay(1L))));
         CombinedConfiguration config = builder.getConfiguration();
         assertEquals("Wrong property value (1)", "ID0001",
                 config.getString("Product/FIIndex/FI[@id='123456781']"));

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=1546644&r1=1546643&r2=1546644&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 Fri Nov 29 20:54:32 2013
@@ -42,7 +42,6 @@ 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.DynamicCombinedConfiguration;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.PropertiesConfiguration;
@@ -52,12 +51,14 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
 import org.apache.commons.configuration.builder.BuilderListener;
 import org.apache.commons.configuration.builder.ConfigurationBuilder;
+import org.apache.commons.configuration.builder.CopyObjectDefaultHandler;
 import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl;
+import org.apache.commons.configuration.builder.FileBasedBuilderProperties;
 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.XMLBuilderProperties;
 import org.apache.commons.configuration.builder.fluent.FileBasedBuilderParameters;
 import org.apache.commons.configuration.builder.fluent.Parameters;
 import org.apache.commons.configuration.convert.DefaultListDelimiterHandler;
@@ -73,7 +74,6 @@ 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;
@@ -1025,16 +1025,20 @@ public class TestCombinedConfigurationBu
                 .combined()
                 .setDefinitionBuilderParameters(
                         parameters.fileBased().setFile(TEST_FILE))
-                .addChildParameters(
-                        new FileBasedBuilderParametersImpl()
-                                .setReloadingRefreshDelay(defRefresh)
-                                .setThrowExceptionOnMissing(true))
-                .addChildParameters(
-                        new XMLBuilderParametersImpl()
-                                .setValidating(false)
-                                .setExpressionEngine(
-                                        new XPathExpressionEngine())
-                                .setReloadingRefreshDelay(xmlRefresh)));
+                .registerChildDefaultsHandler(
+                        FileBasedBuilderProperties.class,
+                        new CopyObjectDefaultHandler(
+                                new FileBasedBuilderParametersImpl()
+                                        .setReloadingRefreshDelay(defRefresh)
+                                        .setThrowExceptionOnMissing(true)))
+                .registerChildDefaultsHandler(
+                        XMLBuilderProperties.class,
+                        new CopyObjectDefaultHandler(
+                                new XMLBuilderParametersImpl()
+                                        .setValidating(false)
+                                        .setExpressionEngine(
+                                                new XPathExpressionEngine())
+                                        .setReloadingRefreshDelay(xmlRefresh))));
         builder.getConfiguration();
         XMLBuilderParametersImpl params = new XMLBuilderParametersImpl();
         builder.initChildBuilderParameters(params);
@@ -1056,34 +1060,6 @@ public class TestCombinedConfigurationBu
     }
 
     /**
-     * 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.
      */

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java?rev=1546644&r1=1546643&r2=1546644&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java Fri Nov 29 20:54:32 2013
@@ -32,8 +32,11 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.configuration.builder.BasicBuilderParameters;
+import org.apache.commons.configuration.builder.BasicBuilderProperties;
 import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
+import org.apache.commons.configuration.builder.CopyObjectDefaultHandler;
 import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl;
+import org.apache.commons.configuration.builder.FileBasedBuilderProperties;
 import org.apache.commons.configuration.builder.ReloadingDetectorFactory;
 import org.apache.commons.configuration.builder.ReloadingFileBasedConfigurationBuilder;
 import org.apache.commons.configuration.builder.fluent.Parameters;
@@ -193,9 +196,11 @@ public class TestReloadingCombinedConfig
         builder.configure(parameters
                 .combined()
                 .setDefinitionBuilder(new ConstantConfigurationBuilder(defConf))
-                .addChildParameters(
-                        new FileBasedBuilderParametersImpl()
-                                .setReloadingDetectorFactory(detectorFactory)));
+                .registerChildDefaultsHandler(
+                        FileBasedBuilderProperties.class,
+                        new CopyObjectDefaultHandler(
+                                new FileBasedBuilderParametersImpl()
+                                        .setReloadingDetectorFactory(detectorFactory))));
         CombinedConfiguration config = builder.getConfiguration();
         assertEquals("Wrong initial value (1)", 0,
                 config.getInt(testProperty(1)));
@@ -250,11 +255,16 @@ public class TestReloadingCombinedConfig
                 .combined()
                 .setDefinitionBuilder(new ConstantConfigurationBuilder(defConf))
                 .setSynchronizer(sync)
-                .addChildParameters(
-                        new BasicBuilderParameters().setSynchronizer(sync))
-                .addChildParameters(
-                        new FileBasedBuilderParametersImpl()
-                                .setReloadingDetectorFactory(detectorFactory)));
+                .registerChildDefaultsHandler(
+                        BasicBuilderProperties.class,
+                        new CopyObjectDefaultHandler(
+                                new BasicBuilderParameters()
+                                        .setSynchronizer(sync)))
+                .registerChildDefaultsHandler(
+                        FileBasedBuilderProperties.class,
+                        new CopyObjectDefaultHandler(
+                                new FileBasedBuilderParametersImpl()
+                                        .setReloadingDetectorFactory(detectorFactory))));
 
         assertEquals("Wrong initial value", "100", builder.getConfiguration()
                 .getString("/property[@name='config']/@value"));