Author: oheger
Date: Tue Nov 11 13:02:37 2008
New Revision: 713166

URL: http://svn.apache.org/viewvc?rev=713166&view=rev
Log:
CONFIGURATION-349: Changed visibility of 
DefaultConfigurationBuilder.XMLConfigurationProvider from package local to 
public to allow for better extensibility. Thanks to Ralph Goers for the patch.

Added:
    
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
   (with props)
Modified:
    
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
    
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
    commons/proper/configuration/trunk/xdocs/changes.xml

Added: 
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml?rev=713166&view=auto
==============================================================================
--- 
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
 (added)
+++ 
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
 Tue Nov 11 13:02:37 2008
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- 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"/>
+    </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>
+</configuration>
\ No newline at end of file

Propchange: 
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
commons/proper/configuration/trunk/conf/testExtendedXMLConfigurationProvider.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java?rev=713166&r1=713165&r2=713166&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
 Tue Nov 11 13:02:37 2008
@@ -1281,8 +1281,10 @@
      * implementation acts like a <code>FileConfigurationProvider</code>, but
      * it will copy all entity IDs that have been registered for the
      * configuration builder to the new XML configuration before it is loaded.
+     *
+     * @since 1.6
      */
-    static class XMLConfigurationProvider extends FileConfigurationProvider
+    public static class XMLConfigurationProvider extends 
FileConfigurationProvider
     {
         /**
          * Creates a new instance of <code>XMLConfigurationProvider</code>.

Modified: 
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java?rev=713166&r1=713165&r2=713166&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
 Tue Nov 11 13:02:37 2008
@@ -61,6 +61,9 @@
     private static final File PROVIDER_FILE = new File(
             "conf/testConfigurationProvider.xml");
 
+    private static final File EXTENDED_PROVIDER_FILE = new File(
+            "conf/testExtendedXMLConfigurationProvider.xml");
+
     /** Constant for the name of an optional configuration.*/
     private static final String OPTIONAL_NAME = "optionalConfig";
 
@@ -775,6 +778,22 @@
         assertNotNull("Provider 'test' not registered", provider);
     }
 
+        /**
+     * Tests loading a configuration definition file that defines new 
providers.
+     */
+    public void testExtendedXMLConfigurationProvider() throws 
ConfigurationException
+    {
+        factory.setFile(EXTENDED_PROVIDER_FILE);
+        CombinedConfiguration cc = factory.getConfiguration(true);
+        DefaultConfigurationBuilder.ConfigurationProvider provider = factory
+                .providerForTag("test");
+        assertNotNull("Provider 'test' not registered", provider);
+        Configuration config = cc.getConfiguration("xml");
+        assertNotNull("Test configuration not present", config);
+        assertTrue("Configuration is not ExtendedXMLConfiguration, is " +
+                config.getClass().getName(), config instanceof 
ExtendedXMLConfiguration);
+    }
+
     /**
      * A specialized combined configuration implementation used for testing
      * custom result classes.
@@ -796,5 +815,13 @@
             return super.getProperty(key);
         }
     }
+
+    public static class ExtendedXMLConfiguration extends XMLConfiguration
+    {
+        public ExtendedXMLConfiguration()
+        {
+        }
+
+    }
 }
 

Modified: commons/proper/configuration/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/xdocs/changes.xml?rev=713166&r1=713165&r2=713166&view=diff
==============================================================================
--- commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ commons/proper/configuration/trunk/xdocs/changes.xml Tue Nov 11 13:02:37 
2008
@@ -23,6 +23,12 @@
 
   <body>
     <release version="1.6" date="in SVN" description="">
+      <action dev="oheger" type="add" issue="CONFIGURATION-349" due-to="Ralph 
Goers">
+        The visibility of DefaultConfigurationBuilder.XMLConfigurationProvider
+        was changed from package local to public. This makes it easier to
+        implement providers that create configuration classes derived from
+        XMLConfiguration.
+      </action>
       <action dev="oheger" type="fix" issue="CONFIGURATION-348">
         AbstractHierarchicalFileConfiguration.getKeys() now also checks whether
         a reload is required.


Reply via email to