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:04:40 UTC

svn commit: r1463685 - 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:04:39 2013
New Revision: 1463685

URL: http://svn.apache.org/r1463685
Log:
CombinedBuilderParametersImpl now supports a way of adding default parameters for child configuration sources.

To a parameters object an arbitrary number of child parameter objects can be
added. These parameters are copied to parameter objects for child
configuration sources. So this is a convenient way to set default properties
for child configuration sources of a combined configuration builder.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParametersImpl.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderProperties.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParametersImpl.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParametersImpl.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParametersImpl.java?rev=1463685&r1=1463684&r2=1463685&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParametersImpl.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParametersImpl.java Tue Apr  2 19:04:39 2013
@@ -16,8 +16,11 @@
  */
 package org.apache.commons.configuration.builder.combined;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
 
 import org.apache.commons.configuration.ConfigurationUtils;
@@ -61,6 +64,9 @@ public class CombinedBuilderParametersIm
     /** A map with registered configuration builder providers. */
     private final Map<String, ConfigurationBuilderProvider> providers;
 
+    /** A list with default parameters for child configuration sources. */
+    private final Collection<BuilderParameters> childParameters;
+
     /** The base path for configuration sources to be loaded. */
     private String basePath;
 
@@ -70,6 +76,7 @@ public class CombinedBuilderParametersIm
     public CombinedBuilderParametersImpl()
     {
         providers = new HashMap<String, ConfigurationBuilderProvider>();
+        childParameters = new LinkedList<BuilderParameters>();
     }
 
     /**
@@ -308,6 +315,35 @@ public class CombinedBuilderParametersIm
     }
 
     /**
+     * {@inheritDoc} This implementation stores the passed in object in an
+     * internal collection. From there it can be queried later to perform
+     * initialization of a combined builder's child configuration sources.
+     */
+    public CombinedBuilderParametersImpl addChildParameters(
+            BuilderParameters params)
+    {
+        if (params != null)
+        {
+            childParameters.add(params);
+        }
+        return this;
+    }
+
+    /**
+     * Returns a collection with default parameter objects for child
+     * configuration sources. This collection contains the same objects (in the
+     * same order) that were passed to {@code addChildParameters()}. The
+     * returned collection is a defensive copy; it can be modified, but this has
+     * no effect on the parameters stored in this object.
+     *
+     * @return a map with default parameters for child sources
+     */
+    public Collection<? extends BuilderParameters> getDefaultChildParameters()
+    {
+        return new ArrayList<BuilderParameters>(childParameters);
+    }
+
+    /**
      * {@inheritDoc} This implementation returns a map which contains this
      * object itself under a specific key. The static {@code fromParameters()}
      * method can be used to extract an instance from a parameters map.

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderProperties.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderProperties.java?rev=1463685&r1=1463684&r2=1463685&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderProperties.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderProperties.java Tue Apr  2 19:04:39 2013
@@ -88,4 +88,27 @@ public interface CombinedBuilderProperti
      * @return a reference to this object for method chaining
      */
     T setDefinitionBuilderParameters(BuilderParameters params);
+
+    /**
+     * Adds a parameters object with default parameters for child configuration
+     * sources. With this method an arbitrary number of parameters objects can
+     * be set. When creating builders for child configuration sources, their
+     * parameters are initialized with all matching properties from these
+     * default parameters. For instance, this method could be called passing in
+     * a parameters object for XML configurations. Then all XML configuration
+     * sources declared in the definition configuration will be initialized with
+     * the properties defined here. If a parameters object for a base class is
+     * passed (e.g. {@code FileBasedBuilderParametersImpl} or
+     * {@code BasicBuilderParameters}), all parameter objects derived from these
+     * base classes are initialized with the corresponding properties. So by
+     * making use of classes in the hierarchy of parameter objects, default
+     * values for specific types of configuration sources can be set in a
+     * fine-grained way. (It is still possible to override properties for a
+     * specific configuration source in the definition file.) This method can be
+     * called multiple times for defining different default parameter objects.
+     *
+     * @param params the default parameters object (can be <b>null</b>)
+     * @return a reference to this object for method chaining
+     */
+    T addChildParameters(BuilderParameters params);
 }

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParametersImpl.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParametersImpl.java?rev=1463685&r1=1463684&r2=1463685&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParametersImpl.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParametersImpl.java Tue Apr  2 19:04:39 2013
@@ -23,7 +23,9 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.commons.beanutils.PropertyUtils;
@@ -32,7 +34,9 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
 import org.apache.commons.configuration.builder.BuilderParameters;
 import org.apache.commons.configuration.builder.ConfigurationBuilder;
+import org.apache.commons.configuration.builder.PropertiesBuilderParametersImpl;
 import org.apache.commons.configuration.builder.XMLBuilderParametersImpl;
+import org.apache.commons.configuration.tree.ExpressionEngine;
 import org.easymock.EasyMock;
 import org.junit.Test;
 
@@ -347,4 +351,45 @@ public class TestCombinedBuilderParamete
                 clone.getDefinitionBuilderParameters().getParameters()
                         .get("systemID"));
     }
+
+    /**
+     * Tests whether default parameters for child sources can be added.
+     */
+    @Test
+    public void testAddChildParameters()
+    {
+        ExpressionEngine engine = EasyMock.createMock(ExpressionEngine.class);
+        CombinedBuilderParametersImpl params =
+                new CombinedBuilderParametersImpl();
+        XMLBuilderParametersImpl xmlParams = new XMLBuilderParametersImpl();
+        xmlParams.setExpressionEngine(engine);
+        xmlParams.setValidating(true);
+        assertSame("Wrong result (1)", params,
+                params.addChildParameters(xmlParams));
+        PropertiesBuilderParametersImpl prpParams =
+                new PropertiesBuilderParametersImpl();
+        prpParams.setIncludesAllowed(false);
+        assertSame("Wrong result (2)", params,
+                params.addChildParameters(prpParams));
+        Collection<? extends BuilderParameters> list =
+                params.getDefaultChildParameters();
+        assertEquals("Wrong number of parameters objects", 2, list.size());
+        Iterator<? extends BuilderParameters> it = list.iterator();
+        assertSame("Wrong parameters object (1)", xmlParams, it.next());
+        assertSame("Wrong parameters object (2)", prpParams, it.next());
+    }
+
+    /**
+     * Tests whether a null parameters object is handled correctly by
+     * addChildParameters().
+     */
+    @Test
+    public void testAddChildParametersNullParams()
+    {
+        CombinedBuilderParametersImpl params =
+                new CombinedBuilderParametersImpl();
+        params.addChildParameters((BuilderParameters) null);
+        assertTrue("Got child parameters", params.getDefaultChildParameters()
+                .isEmpty());
+    }
 }