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 2012/12/05 21:44:19 UTC

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

Author: oheger
Date: Wed Dec  5 20:44:18 2012
New Revision: 1417638

URL: http://svn.apache.org/viewvc?rev=1417638&view=rev
Log:
Added more features to CombinedConfigurationBuilder: support for combiner configuration and custom builder providers.

Added:
    commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml   (with props)
Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParameters.java
    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/TestCombinedBuilderParameters.java
    commons/proper/configuration/trunk/src/test/resources/testExtendedXMLConfigurationProvider.xml

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParameters.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParameters.java?rev=1417638&r1=1417637&r2=1417638&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParameters.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedBuilderParameters.java Wed Dec  5 20:44:18 2012
@@ -17,6 +17,7 @@
 package org.apache.commons.configuration.builder.combined;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -53,6 +54,17 @@ public class CombinedBuilderParameters i
     /** The definition configuration builder. */
     private ConfigurationBuilder<? extends HierarchicalConfiguration> definitionBuilder;
 
+    /** A map with registered configuration builder providers. */
+    private final Map<String, ConfigurationBuilderProvider> providers;
+
+    /**
+     * Creates a new instance of {@code CombinedBuilderParameters}.
+     */
+    public CombinedBuilderParameters()
+    {
+        providers = new HashMap<String, ConfigurationBuilderProvider>();
+    }
+
     /**
      * Looks up an instance of this class in the specified parameters map. This
      * is equivalent to {@code fromParameters(params, false};}
@@ -119,6 +131,94 @@ public class CombinedBuilderParameters i
     }
 
     /**
+     * Registers the given {@code ConfigurationBuilderProvider} for the
+     * specified tag name. This means that whenever this tag is encountered in a
+     * configuration definition file, the corresponding builder provider is
+     * invoked.
+     *
+     * @param tagName the name of the tag (must not be <b>null</b>)
+     * @param provider the {@code ConfigurationBuilderProvider} (must not be
+     *        <b>null</b>)
+     * @return a reference to this object for method chaining
+     * @throws IllegalArgumentException if a required parameter is missing
+     */
+    public CombinedBuilderParameters registerProvider(String tagName,
+            ConfigurationBuilderProvider provider)
+    {
+        if (tagName == null)
+        {
+            throw new IllegalArgumentException("Tag name must not be null!");
+        }
+        if (provider == null)
+        {
+            throw new IllegalArgumentException("Provider must not be null!");
+        }
+
+        providers.put(tagName, provider);
+        return this;
+    }
+
+    /**
+     * Registers all {@code ConfigurationBuilderProvider}s in the given map to
+     * this object which have not yet been registered. This method is mainly
+     * used for internal purposes: a {@code CombinedConfigurationBuilder} takes
+     * the providers contained in a parameters object and adds all standard
+     * providers. This way it is possible to override a standard provider by
+     * registering a provider object for the same tag name at the parameters
+     * object.
+     *
+     * @param providers a map with tag names and corresponding providers
+     * @return a reference to this object for method chaining (must not be
+     *         <b>null</b> or contain <b>null</b> entries
+     * @throws IllegalArgumentException if the map with providers is <b>null</b>
+     *         or contains <b>null</b> entries
+     */
+    public CombinedBuilderParameters registerMissingProviders(
+            Map<String, ConfigurationBuilderProvider> providers)
+    {
+        if (providers == null)
+        {
+            throw new IllegalArgumentException(
+                    "Map with providers must not be null!");
+        }
+
+        for (Map.Entry<String, ConfigurationBuilderProvider> e : providers
+                .entrySet())
+        {
+            if (!this.providers.containsKey(e.getKey()))
+            {
+                registerProvider(e.getKey(), e.getValue());
+            }
+        }
+        return this;
+    }
+
+    /**
+     * Returns an (unmodifiable) map with the currently registered
+     * {@code ConfigurationBuilderProvider} objects.
+     *
+     * @return the map with {@code ConfigurationBuilderProvider} objects (the
+     *         keys are the tag names)
+     */
+    public Map<String, ConfigurationBuilderProvider> getProviders()
+    {
+        return Collections.unmodifiableMap(providers);
+    }
+
+    /**
+     * Returns the {@code ConfigurationBuilderProvider} which is registered for
+     * the specified tag name or <b>null</b> if there is no registration for
+     * this tag.
+     *
+     * @param tagName the tag name
+     * @return the provider registered for this tag or <b>null</b>
+     */
+    public ConfigurationBuilderProvider providerForTag(String tagName)
+    {
+        return providers.get(tagName);
+    }
+
+    /**
      * {@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/CombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java?rev=1417638&r1=1417637&r2=1417638&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 Wed Dec  5 20:44:18 2012
@@ -34,6 +34,7 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.SubnodeConfiguration;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.configuration.beanutils.BeanDeclaration;
+import org.apache.commons.configuration.beanutils.BeanHelper;
 import org.apache.commons.configuration.beanutils.XMLBeanDeclaration;
 import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
 import org.apache.commons.configuration.builder.BuilderListener;
@@ -437,6 +438,9 @@ public class CombinedConfigurationBuilde
             ENV_PROVIDER*/
     };
 
+    /** A map with the default configuration builder providers. */
+    private static final Map<String, ConfigurationBuilderProvider> DEFAULT_PROVIDERS_MAP;
+
     /**
      * A specialized {@code StrLookup} object which operates on the combined
      * configuration constructed by this builder. This object is used as
@@ -458,9 +462,6 @@ public class CombinedConfigurationBuilde
 //        }
 //    };
 //
-    /** Stores a map with the registered configuration builder providers. */
-    private final Map<String, ConfigurationBuilderProvider> providers =
-            new HashMap<String, ConfigurationBuilderProvider>();
 
     /** The builder for the definition configuration. */
     private ConfigurationBuilder<? extends HierarchicalConfiguration> definitionBuilder;
@@ -471,6 +472,9 @@ public class CombinedConfigurationBuilde
     /** The object with data about configuration sources. */
     private ConfigurationSourceData sourceData;
 
+    /** Stores the current parameters object. */
+    private CombinedBuilderParameters currentParameters;
+
     /** Stores the base path to the configuration sources to load. */
     private String configurationBasePath;
 
@@ -481,7 +485,6 @@ public class CombinedConfigurationBuilde
     public CombinedConfigurationBuilder()
     {
         super(CombinedConfiguration.class);
-        initialize();
     }
 
     /**
@@ -493,7 +496,6 @@ public class CombinedConfigurationBuilde
     public CombinedConfigurationBuilder(Map<String, Object> params)
     {
         super(CombinedConfiguration.class, params);
-        initialize();
     }
 
     /**
@@ -506,15 +508,6 @@ public class CombinedConfigurationBuilde
     public CombinedConfigurationBuilder(Map<String, Object> params, boolean allowFailOnInit)
     {
         super(CombinedConfiguration.class, params, allowFailOnInit);
-        initialize();
-    }
-
-    /**
-     * Initializes this instance.
-     */
-    private void initialize()
-    {
-        registerDefaultProviders();
     }
 
     /**
@@ -545,55 +538,6 @@ public class CombinedConfigurationBuilde
     }
 
     /**
-     * Adds a {@code ConfigurationBuilderProvider} for the specified tag.
-     * Whenever this tag is encountered in the configuration definition file
-     * this provider will be called to create the configuration builder object.
-     *
-     * @param tagName the name of the tag in the configuration definition file
-     *        (must not be <b>null</b>
-     * @param provider the provider for this tag (must not be <b>null</b>
-     * @throws IllegalArgumentException if a required parameter is missing
-     */
-    public void addConfigurationProvider(String tagName,
-            ConfigurationBuilderProvider provider)
-    {
-        if (tagName == null)
-        {
-            throw new IllegalArgumentException("Tag name must not be null!");
-        }
-        if (provider == null)
-        {
-            throw new IllegalArgumentException("Provider must not be null!");
-        }
-
-        providers.put(tagName, provider);
-    }
-
-    /**
-     * Removes the {@code ConfigurationBuilderProvider} for the specified tag name.
-     *
-     * @param tagName the tag name
-     * @return the removed configuration provider or <b>null</b> if none was
-     * registered for that tag
-     */
-    public ConfigurationBuilderProvider removeConfigurationProvider(String tagName)
-    {
-        return providers.remove(tagName);
-    }
-
-    /**
-     * Returns the {@code ConfigurationBuilderProvider} for the given tag.
-     *
-     * @param tagName the name of the tag
-     * @return the provider that was registered for this tag or <b>null</b> if
-     * there is none
-     */
-    public ConfigurationBuilderProvider providerForTag(String tagName)
-    {
-        return providers.get(tagName);
-    }
-
-    /**
      * Returns the configuration provided by this builder. If the boolean
      * parameter is <b>true</b>, the configuration definition file will be
      * loaded. It will then be parsed, and instances for the declared
@@ -612,7 +556,6 @@ public class CombinedConfigurationBuilde
         initFileSystem();
         initSystemProperties();
         configureEntityResolver();
-        registerConfiguredProviders();
         registerConfiguredLookups();
 
 //        CombinedConfiguration result = createResultConfiguration();
@@ -787,12 +730,15 @@ public class CombinedConfigurationBuilde
         }
 
         ConfigurationSourceData data = getSourceData();
-        createAndAddConfigurations(result, data.getOverrideBuilders(), data);
+        initNodeCombinerListNodes(result, config, KEY_OVERRIDE_LIST);
+        registerConfiguredProviders(config);
 
+        createAndAddConfigurations(result, data.getOverrideBuilders(), data);
         if (!data.getUnionBuilders().isEmpty())
         {
             CombinedConfiguration addConfig = createAdditionalsConfiguration(result);
             result.addConfiguration(addConfig, ADDITIONAL_NAME);
+            initNodeCombinerListNodes(addConfig, config, KEY_ADDITIONAL_LIST);
             createAndAddConfigurations(addConfig, data.getUnionBuilders(), data);
         }
     }
@@ -824,36 +770,6 @@ public class CombinedConfigurationBuilde
     }
 
     /**
-     * Registers the default configuration providers supported by this class.
-     * This method will be called during initialization. It registers
-     * configuration providers for the tags that are supported by default.
-     */
-    protected void registerDefaultProviders()
-    {
-        for (int i = 0; i < DEFAULT_TAGS.length; i++)
-        {
-            addConfigurationProvider(DEFAULT_TAGS[i], DEFAULT_PROVIDERS[i]);
-        }
-    }
-
-    /**
-     * Registers providers defined in the configuration.
-     *
-     * @throws ConfigurationException if an error occurs
-     */
-    protected void registerConfiguredProviders() throws ConfigurationException
-    {
-//        List<SubnodeConfiguration> nodes = configurationsAt(KEY_CONFIGURATION_PROVIDERS);
-//        for (SubnodeConfiguration config : nodes)
-//        {
-//            XMLBeanDeclaration decl = new XMLBeanDeclaration(config);
-//            String key = config.getString(KEY_PROVIDER_KEY);
-//            addConfigurationProvider(key, (BaseConfigurationBuilderProvider) BeanHelper
-//                    .createBean(decl));
-//        }
-    }
-
-    /**
      * Registers StrLookups defined in the configuration.
      *
      * @throws ConfigurationException if an error occurs
@@ -938,6 +854,34 @@ public class CombinedConfigurationBuilde
 //    }
 
     /**
+     * Returns the {@code ConfigurationBuilderProvider} for the given tag. This
+     * method is called during creation of the result configuration. (It is not
+     * allowed to call it at another point of time; result is then
+     * unpredictable!) It supports all default providers and custom providers
+     * added through the parameters object as well.
+     *
+     * @param tagName the name of the tag
+     * @return the provider that was registered for this tag or <b>null</b> if
+     *         there is none
+     */
+    protected ConfigurationBuilderProvider providerForTag(String tagName)
+    {
+        return currentParameters.providerForTag(tagName);
+    }
+
+    /**
+     * Initializes the current parameters object. This object has either been
+     * passed at builder configuration time or it is newly created. In any
+     * case, it is manipulated during result creation.
+     */
+    private void setUpCurrentParameters()
+    {
+        currentParameters =
+                CombinedBuilderParameters.fromParameters(getParameters(), true);
+        currentParameters.registerMissingProviders(DEFAULT_PROVIDERS_MAP);
+    }
+
+    /**
      * Obtains the data object for the configuration sources and the
      * corresponding builders. This object is created on first access and reset
      * when the definition builder sends a change event. This method is called
@@ -966,12 +910,34 @@ public class CombinedConfigurationBuilde
     private ConfigurationSourceData createSourceData()
             throws ConfigurationException
     {
+        setUpCurrentParameters();
         ConfigurationSourceData result = new ConfigurationSourceData();
         result.initFromDefinitionConfiguration(getDefinitionConfiguration());
         return result;
     }
 
     /**
+     * Registers providers defined in the configuration.
+     *
+     * @param defConfig the definition configuration
+     * @throws ConfigurationException if an error occurs
+     */
+    private void registerConfiguredProviders(HierarchicalConfiguration defConfig)
+            throws ConfigurationException
+    {
+        List<SubnodeConfiguration> nodes =
+                defConfig.configurationsAt(KEY_CONFIGURATION_PROVIDERS);
+        for (SubnodeConfiguration config : nodes)
+        {
+            XMLBeanDeclaration decl = new XMLBeanDeclaration(config);
+            String key = config.getString(KEY_PROVIDER_KEY);
+            currentParameters.registerProvider(key,
+                    (BaseConfigurationBuilderProvider) BeanHelper
+                            .createBean(decl));
+        }
+    }
+
+    /**
      * Adds a listener at the given definition builder which resets this builder
      * when a reset of the definition builder happens. This way it is ensured
      * that this builder produces a new combined configuration when its
@@ -997,6 +963,26 @@ public class CombinedConfigurationBuilde
     }
 
     /**
+     * Initializes the list nodes of the node combiner for the given combined
+     * configuration. This information can be set in the header section of the
+     * configuration definition file for both the override and the union
+     * combiners.
+     *
+     * @param cc the combined configuration to initialize
+     * @param defConfig the definition configuration
+     * @param key the key for the list nodes
+     */
+    private static void initNodeCombinerListNodes(CombinedConfiguration cc,
+            HierarchicalConfiguration defConfig, String key)
+    {
+        List<Object> listNodes = defConfig.getList(key);
+        for (Object listNode : listNodes)
+        {
+            cc.getNodeCombiner().addListNode((String) listNode);
+        }
+    }
+
+    /**
      * Queries the current {@code Configuration} objects from the given builders
      * and adds them to the specified combined configuration.
      *
@@ -1031,6 +1017,27 @@ public class CombinedConfigurationBuilde
     }
 
     /**
+     * Creates the map with the default configuration builder providers.
+     *
+     * @return the map with default providers
+     */
+    private static Map<String, ConfigurationBuilderProvider> createDefaultProviders()
+    {
+        Map<String, ConfigurationBuilderProvider> providers =
+                new HashMap<String, ConfigurationBuilderProvider>();
+        for (int i = 0; i < DEFAULT_TAGS.length; i++)
+        {
+            providers.put(DEFAULT_TAGS[i], DEFAULT_PROVIDERS[i]);
+        }
+        return providers;
+    }
+
+    static
+    {
+        DEFAULT_PROVIDERS_MAP = createDefaultProviders();
+    }
+
+    /**
      * A data class for storing information about all configuration sources
      * defined for a combined builder.
      */

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParameters.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParameters.java?rev=1417638&r1=1417637&r2=1417638&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParameters.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedBuilderParameters.java Wed Dec  5 20:44:18 2012
@@ -16,9 +16,11 @@
  */
 package org.apache.commons.configuration.builder.combined;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,6 +28,7 @@ import java.util.Map;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
 import org.apache.commons.configuration.builder.ConfigurationBuilder;
+import org.easymock.EasyMock;
 import org.junit.Test;
 
 /**
@@ -87,4 +90,124 @@ public class TestCombinedBuilderParamete
         assertSame("Builder was not set", builder,
                 params.getDefinitionBuilder());
     }
+
+    /**
+     * Tests whether the map with providers is initially empty.
+     */
+    @Test
+    public void testGetProvidersInitial()
+    {
+        CombinedBuilderParameters params = new CombinedBuilderParameters();
+        assertTrue("Got providers", params.getProviders().isEmpty());
+    }
+
+    /**
+     * Tests whether a new builder provider can be registered.
+     */
+    @Test
+    public void testRegisterProvider()
+    {
+        ConfigurationBuilderProvider provider =
+                EasyMock.createMock(ConfigurationBuilderProvider.class);
+        EasyMock.replay(provider);
+        String tagName = "testTag";
+        CombinedBuilderParameters params = new CombinedBuilderParameters();
+        assertSame("Wrong result", params,
+                params.registerProvider(tagName, provider));
+        Map<String, ConfigurationBuilderProvider> providers =
+                params.getProviders();
+        assertEquals("Wrong number of providers", 1, providers.size());
+        assertSame("Wrong provider (1)", provider, providers.get(tagName));
+        assertSame("Wrong provider (2)", provider,
+                params.providerForTag(tagName));
+    }
+
+    /**
+     * Tries to register a provider without a tag name.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testRegisterProviderNoTag()
+    {
+        new CombinedBuilderParameters().registerProvider(null,
+                EasyMock.createMock(ConfigurationBuilderProvider.class));
+    }
+
+    /**
+     * Tries to register a null provider.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testRegisterProviderNoProvider()
+    {
+        new CombinedBuilderParameters().registerProvider("aTag", null);
+    }
+
+    /**
+     * Tests that the map with providers cannot be modified.
+     */
+    @Test(expected = UnsupportedOperationException.class)
+    public void testGetProvidersModify()
+    {
+        CombinedBuilderParameters params = new CombinedBuilderParameters();
+        params.getProviders().put("tag",
+                EasyMock.createMock(ConfigurationBuilderProvider.class));
+    }
+
+    /**
+     * Tests whether missing providers can be registered.
+     */
+    @Test
+    public void testRegisterMissingProviders()
+    {
+        ConfigurationBuilderProvider provider1 =
+                EasyMock.createMock(ConfigurationBuilderProvider.class);
+        ConfigurationBuilderProvider provider2 =
+                EasyMock.createMock(ConfigurationBuilderProvider.class);
+        ConfigurationBuilderProvider provider3 =
+                EasyMock.createMock(ConfigurationBuilderProvider.class);
+        String tagPrefix = "testTag";
+        CombinedBuilderParameters params = new CombinedBuilderParameters();
+        params.registerProvider(tagPrefix, provider1);
+        Map<String, ConfigurationBuilderProvider> map =
+                new HashMap<String, ConfigurationBuilderProvider>();
+        map.put(tagPrefix, provider2);
+        map.put(tagPrefix + 1, provider3);
+        assertSame("Wrong result", params, params.registerMissingProviders(map));
+        assertEquals("Wrong number of providers", 2, params.getProviders()
+                .size());
+        assertSame("Wrong provider (1)", provider1,
+                params.providerForTag(tagPrefix));
+        assertSame("Wrong provider (2)", provider3,
+                params.providerForTag(tagPrefix + 1));
+    }
+
+    /**
+     * Tries to register a null map with missing providers.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testRegisterMissingProvidersNullMap()
+    {
+        new CombinedBuilderParameters().registerMissingProviders(null);
+    }
+
+    /**
+     * Tries to register a map with missing providers containing a null entry.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testRegisterMissingProvidersNullEntry()
+    {
+        Map<String, ConfigurationBuilderProvider> map =
+                new HashMap<String, ConfigurationBuilderProvider>();
+        map.put("tag", null);
+        new CombinedBuilderParameters().registerMissingProviders(map);
+    }
+
+    /**
+     * Tests the result for an unknown provider.
+     */
+    @Test
+    public void testProviderForUnknown()
+    {
+        CombinedBuilderParameters params = new CombinedBuilderParameters();
+        assertNull("Got a provider", params.providerForTag("someTag"));
+    }
 }

Modified: commons/proper/configuration/trunk/src/test/resources/testExtendedXMLConfigurationProvider.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/resources/testExtendedXMLConfigurationProvider.xml?rev=1417638&r1=1417637&r2=1417638&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/resources/testExtendedXMLConfigurationProvider.xml (original)
+++ commons/proper/configuration/trunk/src/test/resources/testExtendedXMLConfigurationProvider.xml Wed Dec  5 20:44:18 2012
@@ -18,37 +18,11 @@
 <!-- Test configuration definition file that demonstrates complex initialization -->
 <configuration>
   <header>
-    <result delimiterParsingDisabled="true">
-      <nodeCombiner config-class="org.apache.commons.configuration.tree.OverrideCombiner"/>
-      <expressionEngine config-class="org.apache.commons.configuration.tree.xpath.XPathExpressionEngine"/>
-    </result>
     <providers>
       <provider config-tag="test"
-                config-class="org.apache.commons.configuration.DefaultConfigurationBuilder$XMLConfigurationProvider"
-                configurationClass="org.apache.commons.configuration.TestDefaultConfigurationBuilder$ExtendedXMLConfiguration"/>
+                config-class="org.apache.commons.configuration.builder.combined.TestCombinedConfigurationBuilder$BuilderProviderTestImpl"
+                propertyKey="testKey"/>
     </providers>
-    <combiner>
-      <override>
-        <list-nodes>
-          <node>table</node>
-          <node>list</node>
-        </list-nodes>
-      </override>
-    </combiner>
   </header>
-  <system/>
-  <properties fileName="test.properties" throwExceptionOnMissing="true"
-    config-name="properties">
-    <reloadingStrategy config-class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy"
-      refreshDelay="10000"/>
-  </properties>
-  <!-- Fetch the file name from a variable -->
-  <test fileName="${test_file_xml}" config-name="xml">
-    <expressionEngine config-class="org.apache.commons.configuration.tree.DefaultExpressionEngine"
-      propertyDelimiter="/" indexStart="[" indexEnd="]"/>
-  </test>
-  <additional>
-    <xml config-name="combiner1" fileName="${test_file_combine}"/>  -->
-    <xml config-name="combiner2" fileName="testcombine2.xml"/>
-  </additional>
+  <test/>
 </configuration>
\ No newline at end of file

Added: commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml?rev=1417638&view=auto
==============================================================================
--- commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml (added)
+++ commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml Wed Dec  5 20:44:18 2012
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<!-- Test configuration definition file that demonstrates complex initialization
+     of the result configuration in the header section.
+-->
+<configuration>
+  <header>
+    <result delimiterParsingDisabled="true" forceReloadCheck="true"
+      ignoreReloadExceptions="true">
+      <nodeCombiner config-class="org.apache.commons.configuration.tree.OverrideCombiner"/>
+      <expressionEngine config-class="org.apache.commons.configuration.tree.xpath.XPathExpressionEngine"/>
+    </result>
+    <combiner>
+      <override>
+        <list-nodes>
+          <node>table</node>
+          <node>list</node>
+        </list-nodes>
+      </override>
+    </combiner>
+  </header>
+  <properties fileName="test.properties" throwExceptionOnMissing="true"
+    config-name="properties">
+  </properties>
+  <additional>
+    <xml config-name="combiner1" fileName="testcombine1.xml"/>  -->
+    <xml config-name="combiner2" fileName="testcombine2.xml"/>
+  </additional>
+</configuration>

Propchange: commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/configuration/trunk/src/test/resources/testResultInitialization.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml