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 2016/02/14 20:05:12 UTC

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

Author: oheger
Date: Sun Feb 14 19:05:12 2016
New Revision: 1730384

URL: http://svn.apache.org/viewvc?rev=1730384&view=rev
Log:
[CONFIGURATION-619] CombinedConfigurationBuilder now supports inheritance.

If the corresponding flag in the parameters is set, the builder's
parameters are inherited by the builders for child configurations.
This simplifies the construction of a CombinedConfigurationBuilder in
cases where the configuration sources to be loaded have similar
conventions and requirements.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/builder/combined/TestCombinedConfigurationBuilder.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java?rev=1730384&r1=1730383&r2=1730384&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java Sun Feb 14 19:05:12 2016
@@ -1157,6 +1157,10 @@ public class CombinedConfigurationBuilde
     {
         params.setPrefixLookups(fetchPrefixLookups());
         params.setParentInterpolator(parentInterpolator);
+        if (currentParameters.isInheritSettings())
+        {
+            params.inheritFrom(getParameters());
+        }
     }
 
     /**

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/builder/combined/TestCombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/builder/combined/TestCombinedConfigurationBuilder.java?rev=1730384&r1=1730383&r2=1730384&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/builder/combined/TestCombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/builder/combined/TestCombinedConfigurationBuilder.java Sun Feb 14 19:05:12 2016
@@ -58,8 +58,10 @@ import org.apache.commons.configuration2
 import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder;
 import org.apache.commons.configuration2.builder.XMLBuilderParametersImpl;
 import org.apache.commons.configuration2.builder.XMLBuilderProperties;
+import org.apache.commons.configuration2.builder.fluent.CombinedBuilderParameters;
 import org.apache.commons.configuration2.builder.fluent.FileBasedBuilderParameters;
 import org.apache.commons.configuration2.builder.fluent.Parameters;
+import org.apache.commons.configuration2.builder.fluent.XMLBuilderParameters;
 import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
 import org.apache.commons.configuration2.convert.ListDelimiterHandler;
 import org.apache.commons.configuration2.event.ConfigurationEvent;
@@ -75,6 +77,8 @@ import org.apache.commons.configuration2
 import org.apache.commons.configuration2.reloading.ReloadingController;
 import org.apache.commons.configuration2.reloading.ReloadingControllerSupport;
 import org.apache.commons.configuration2.resolver.CatalogResolver;
+import org.apache.commons.configuration2.tree.DefaultExpressionEngine;
+import org.apache.commons.configuration2.tree.DefaultExpressionEngineSymbols;
 import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.commons.configuration2.tree.xpath.XPathExpressionEngine;
 import org.easymock.EasyMock;
@@ -1328,6 +1332,64 @@ public class TestCombinedConfigurationBu
     }
 
     /**
+     * Prepares a parameters object for a test for properties inheritance.
+     * @param params the {@code Parameters} object
+     * @return the builder parameters
+     */
+    private static XMLBuilderParameters prepareParamsForInheritanceTest(Parameters params) {
+        DefaultExpressionEngineSymbols symbols = new DefaultExpressionEngineSymbols.Builder(
+                DefaultExpressionEngineSymbols.DEFAULT_SYMBOLS)
+                .setPropertyDelimiter("/").create();
+        DefaultExpressionEngine engine = new DefaultExpressionEngine(symbols);
+        DefaultListDelimiterHandler listDelimiterHandler = new DefaultListDelimiterHandler(',');
+        return params.xml()
+                .setExpressionEngine(engine)
+                .setListDelimiterHandler(listDelimiterHandler).setFile(TEST_FILE);
+    }
+
+    /**
+     * Tests whether builder properties can be inherited by child builders.
+     */
+    @Test
+    public void testInheritProperties() throws ConfigurationException
+    {
+        Parameters params = new Parameters();
+        XMLBuilderParameters xmlParams =
+                prepareParamsForInheritanceTest(params);
+        builder.configure(xmlParams);
+        CombinedConfiguration config = builder.getConfiguration();
+
+        List<String> list = config.getList(String.class, "test/mixed/array");
+        assertTrue("Wrong number of elements in list", list.size() > 2);
+        String[] stringArray = config.getStringArray("test/mixed/array");
+        assertTrue("Wrong number of elements in array", stringArray.length > 2);
+        XMLConfiguration xmlConfig =
+                (XMLConfiguration) config.getConfiguration("xml");
+        list = xmlConfig.getList(String.class, "split/list1");
+        assertEquals("Wrong number of elements in XML list", 3, list.size());
+    }
+
+    /**
+     * Tests whether the inheritance of builder properties can be disabled.
+     */
+    @Test
+    public void testSuppressChildBuilderPropertyInheritance()
+            throws ConfigurationException
+    {
+        Parameters params = new Parameters();
+        CombinedBuilderParameters combinedParams =
+                params.combined().setInheritSettings(false);
+        builder.configure(combinedParams,
+                prepareParamsForInheritanceTest(params));
+        CombinedConfiguration config = builder.getConfiguration();
+
+        XMLConfiguration xmlConfig =
+                (XMLConfiguration) config.getConfiguration("xml");
+        List<String> list = xmlConfig.getList(String.class, "split.list1");
+        assertEquals("Wrong number of elements in XML list", 1, list.size());
+    }
+
+    /**
      * A test builder provider implementation for testing whether providers can
      * be defined in the definition file.
      */