You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rg...@apache.org on 2009/04/02 07:42:42 UTC

svn commit: r761171 - in /commons/proper/configuration/trunk: conf/ src/java/org/apache/commons/configuration/ src/java/org/apache/commons/configuration/reloading/ src/java/org/apache/commons/configuration/tree/ src/test/org/apache/commons/configuratio...

Author: rgoers
Date: Thu Apr  2 05:42:41 2009
New Revision: 761171

URL: http://svn.apache.org/viewvc?rev=761171&view=rev
Log:
Fix Checkstyle errors, add documentation, allow FileSystem to be configured in DefaultConfigurationBuilder

Added:
    commons/proper/configuration/trunk/conf/testFileSystem.xml
      - copied, changed from r760159, commons/proper/configuration/trunk/conf/testConfigurationProvider.xml
    commons/proper/configuration/trunk/xdocs/userguide/howto_filesystems.xml   (with props)
Modified:
    commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
    commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/reloading/VFSFileMonitorReloadingStrategy.java
    commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/MergeCombiner.java
    commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/NodeCombiner.java
    commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestVFSConfigurationBuilder.java
    commons/proper/configuration/trunk/xdocs/building.xml
    commons/proper/configuration/trunk/xdocs/userguide/howto_combinedconfiguration.xml
    commons/proper/configuration/trunk/xdocs/userguide/user_guide.xml

Copied: commons/proper/configuration/trunk/conf/testFileSystem.xml (from r760159, commons/proper/configuration/trunk/conf/testConfigurationProvider.xml)
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/conf/testFileSystem.xml?p2=commons/proper/configuration/trunk/conf/testFileSystem.xml&p1=commons/proper/configuration/trunk/conf/testConfigurationProvider.xml&r1=760159&r2=761171&rev=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/conf/testConfigurationProvider.xml (original)
+++ commons/proper/configuration/trunk/conf/testFileSystem.xml Thu Apr  2 05:42:41 2009
@@ -6,6 +6,7 @@
       <nodeCombiner config-class="org.apache.commons.configuration.tree.OverrideCombiner"/>
       <expressionEngine config-class="org.apache.commons.configuration.tree.xpath.XPathExpressionEngine"/>
     </result>
+    <fileSystem config-class="org.apache.commons.configuration.VFSFileSystem"/>
     <providers>
       <provider config-tag="test"
                 config-class="org.apache.commons.configuration.DefaultConfigurationBuilder$FileConfigurationProvider"/>

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=761171&r1=761170&r2=761171&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 Thu Apr  2 05:42:41 2009
@@ -342,6 +342,11 @@
     static final String KEY_LOOKUP_KEY = XMLBeanDeclaration.ATTR_PREFIX + "prefix]";
 
     /**
+     * Constance for the FileSystem.
+     */
+    static final String FILE_SYSTEM = SEC_HEADER + ".fileSystem";
+
+    /**
      * Constant for the key of the result declaration. This key can point to a
      * bean declaration, which defines properties of the resulting combined
      * configuration.
@@ -486,17 +491,6 @@
     }
 
     /**
-     * Sets the FileSystem to use for the created CombinedConfiguration and
-     * @param fileSystem The FileSystem
-     */
-    public void setFileSystem(FileSystem fileSystem)
-    {
-        FileSystem.setDefaultFileSystem(fileSystem);
-    }
-
-
-
-    /**
      * Adds a configuration provider for the specified tag. Whenever this tag is
      * encountered in the configuration definition file this provider will be
      * called to create the configuration object.
@@ -577,6 +571,7 @@
             load();
         }
 
+        initFileSystem();
         initSystemProperties();
         configureEntityResolver();
         registerConfiguredProviders();
@@ -712,6 +707,16 @@
         }
     }
 
+    protected void initFileSystem() throws ConfigurationException
+    {
+        if (getMaxIndex(FILE_SYSTEM) == 0)
+        {
+            HierarchicalConfiguration config = configurationAt(FILE_SYSTEM);
+            XMLBeanDeclaration decl = new XMLBeanDeclaration(config);
+            setFileSystem((FileSystem) BeanHelper.createBean(decl));
+        }
+    }
+
     /**
      * If a property file is configured add the properties to the System properties.
      * @throws ConfigurationException if an error occurs.
@@ -1342,6 +1347,14 @@
                 ConfigurationDeclaration decl) throws Exception
         {
             AbstractConfiguration result = getEmptyConfiguration(decl);
+            if (result instanceof FileSystemBased)
+            {
+                DefaultConfigurationBuilder builder = decl.getConfigurationBuilder();
+                if (builder.getFileSystem() != null)
+                {
+                    ((FileSystemBased) result).setFileSystem(builder.getFileSystem());
+                }
+            }
             ((FileConfiguration) result).load();
             return result;
         }

Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/reloading/VFSFileMonitorReloadingStrategy.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/reloading/VFSFileMonitorReloadingStrategy.java?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/reloading/VFSFileMonitorReloadingStrategy.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/reloading/VFSFileMonitorReloadingStrategy.java Thu Apr  2 05:42:41 2009
@@ -55,7 +55,7 @@
     private static final long DEFAULT_DELAY = 1000;
 
     /** Stores a reference to the configuration to be monitored. */
-    protected FileConfiguration configuration;    
+    protected FileConfiguration configuration;
 
     /** The reload status */
     private boolean reloadRequired;

Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/MergeCombiner.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/MergeCombiner.java?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/MergeCombiner.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/MergeCombiner.java Thu Apr  2 05:42:41 2009
@@ -58,7 +58,7 @@
         printTree(result);
         return result;
     }
-    
+
     public ConfigurationNode doCombine(ConfigurationNode node1, ConfigurationNode node2)
     {
         ViewNode result = createViewNode();
@@ -142,7 +142,7 @@
                 ConfigurationNode attr1 = (ConfigurationNode) iter.next();
                 List list2 = node.getAttributes(attr1.getName());
                 if (list2.size() == 1
-                    && !attr1.getValue().equals(((ConfigurationNode)list2.get(0)).getValue()))
+                    && !attr1.getValue().equals(((ConfigurationNode) list2.get(0)).getValue()))
                 {
                     node = null;
                     break;
@@ -165,8 +165,8 @@
             {
                 children2.remove(iter.next());
             }
-        }        
+        }
 
         return null;
     }
-}
\ No newline at end of file
+}

Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/NodeCombiner.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/NodeCombiner.java?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/NodeCombiner.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/tree/NodeCombiner.java Thu Apr  2 05:42:41 2009
@@ -54,12 +54,12 @@
  */
 public abstract class NodeCombiner
 {
-    /** Stream to write debug output to */
-    private PrintStream debugStream = null;
-    
     /** Stores a list with node names that are known to be list nodes. */
     protected Set listNodes;
 
+    /** Stream to write debug output to */
+    private PrintStream debugStream;
+
     /**
      * Creates a new instance of <code>NodeCombiner</code>.
      */
@@ -135,7 +135,7 @@
     {
         this.debugStream = stream;
     }
-        
+
     protected void printTree(ConfigurationNode result)
     {
         if (debugStream != null)

Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestVFSConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestVFSConfigurationBuilder.java?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestVFSConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestVFSConfigurationBuilder.java Thu Apr  2 05:42:41 2009
@@ -20,6 +20,8 @@
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Set;
+import java.util.List;
+import java.util.Iterator;
 
 import junit.framework.TestCase;
 
@@ -76,6 +78,9 @@
     private static final File MULTI_TENENT_FILE = new File(
             "conf/testMultiTenentConfigurationBuilder.xml");
 
+    private static final File FILESYSTEM_FILE = new File(
+            "conf/testFileSystem.xml");
+
     /** Constant for the name of an optional configuration.*/
     private static final String OPTIONAL_NAME = "optionalConfig";
 
@@ -888,6 +893,79 @@
         verify("1005", config, 50);
     }
 
+    public void testSetFileSystem() throws Exception
+    {
+        factory.setFile(PROVIDER_FILE);
+        FileSystem fs = new VFSFileSystem();
+        factory.setFileSystem(fs);
+        FileSystem.resetDefaultFileSystem();
+        System.getProperties().remove("Id");
+
+        CombinedConfiguration config = factory.getConfiguration(true);
+        List list = config.getConfigurations();
+        assertTrue("Incorrect number of configurations - " + list.size(), list.size() == 4);
+        Iterator iter = list.iterator();
+        while (iter.hasNext())
+        {
+            Configuration conf = (Configuration)iter.next();
+            if (conf instanceof FileSystemBased)
+            {
+                assertTrue("Incorrect file system for Configuration " + conf,
+                        ((FileSystemBased)conf).getFileSystem() == fs);
+            }
+            else if (conf instanceof CombinedConfiguration)
+            {
+                Iterator it = ((CombinedConfiguration)conf).getConfigurations().iterator();
+                while (it.hasNext())
+                {
+                    conf = (Configuration)it.next();
+                    if (conf instanceof FileSystemBased)
+                    {
+                        assertTrue("Incorrect file system for Configuration " + conf,
+                            ((FileSystemBased)conf).getFileSystem() == fs); 
+                    }
+                }
+            }
+        }
+    }
+
+    public void testConfiguredFileSystem() throws Exception
+    {
+        factory.setFile(FILESYSTEM_FILE);
+        FileSystem.resetDefaultFileSystem();
+        System.getProperties().remove("Id");
+
+        CombinedConfiguration config = factory.getConfiguration(true);
+        FileSystem fs = factory.getFileSystem();
+        assertNotNull("No File System",fs);
+        assertTrue("Incorrect File System", fs instanceof VFSFileSystem);
+        List list = config.getConfigurations();
+        assertTrue("Incorrect number of configurations - " + list.size(), list.size() == 4);
+        Iterator iter = list.iterator();
+        while (iter.hasNext())
+        {
+            Configuration conf = (Configuration)iter.next();
+            if (conf instanceof FileSystemBased)
+            {
+                assertTrue("Incorrect file system for Configuration " + conf,
+                        ((FileSystemBased)conf).getFileSystem() == fs);
+            }
+            else if (conf instanceof CombinedConfiguration)
+            {
+                Iterator it = ((CombinedConfiguration)conf).getConfigurations().iterator();
+                while (it.hasNext())
+                {
+                    conf = (Configuration)it.next();
+                    if (conf instanceof FileSystemBased)
+                    {
+                        assertTrue("Incorrect file system for Configuration " + conf,
+                            ((FileSystemBased)conf).getFileSystem() == fs);
+                    }
+                }
+            }
+        }
+    }
+
     private void verify(String key, CombinedConfiguration config, int rows)
     {
         System.setProperty("Id", key);

Modified: commons/proper/configuration/trunk/xdocs/building.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/xdocs/building.xml?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/xdocs/building.xml (original)
+++ commons/proper/configuration/trunk/xdocs/building.xml Thu Apr  2 05:42:41 2009
@@ -36,11 +36,51 @@
           </p>
         </section>
 
-        <section name="Maven Goals">
+        <section name="Maven 2">
           <p>
-            Maven 1.x is our recommended build tool. To build the Configuration
-            jar file, change into the directory where you unzipped the source
-            distribution or where you checked out the sources from SVN and run
+            Commons Configuration uses Maven 2 as its build tool. To build the Configuration
+            jar, change into the directory where the source distribution resides and run
+            "mvn install". This will compile the source and tests, run the tests, and then
+            package the jar. The jar will also be copied into the local maven repository
+            for use by other builds.
+          </p>
+          <p>
+            To build the web site run "mvn site". When it completes the web site will reside in
+            the target/site directory and may be viewed by opening target/site/index.html.
+          </p>
+        </section>
+        <section name="Running Functional Tests">
+          <p>
+            <code>TestWebdavConfigurationBuilder</code> is a functional test that tests
+            DefaultConfigurationBuilder with the configuration files stored in a WebDAV
+            server. To run the test the steps that follow
+            <ol>
+              <li>Copy all the files in the conf directory to the WebDAV server. Not all the
+              files are required but it is generally easier to use a tool like cadaver
+              and do an mput than try to copy the required files individually.</li>
+              <li>Add the following to the profiles section of settings.xml in the Maven home
+              directory. Modify the urls to match your setup.
+<source><![CDATA[
+   <profile>
+    <profile>
+      <id>webdav</id>
+      <activation>
+        <activeByDefault>false</activeByDefault>
+      </activation>
+      <properties>
+        <test.webdav.base>webdav://vfsusr:vfstest@192.168.10.133:80/conf</test.webdav.base>
+      </properties>
+    </profile>]]></source></li>
+              <li>run "mvn -P webdav test -Dtest=TestWebdavConfigurationBuilder". The test
+              can also be run using "mvn -P webdav test" but this will run all the unit tests
+              in addition to the WebDAV test.</li>
+            </ol>
+          </p>
+        </section>
+        <section name="Maven 1 Goals">
+          <p>
+            To build the Configuration jar file using Maven 1, change into the directory where you
+            unzipped the source distribution or where you checked out the sources from SVN and run
             "maven jar". The result will be in the (newly created) "target"
             subdirectory.
           </p>
@@ -125,7 +165,7 @@
 
         <section name="Setting custom build parameters">
           <p>
-            Both the maven and the ant build script support a file called
+            Both the maven 1 and the ant build script support a file called
             <code>build.properties</code> that can contain custom properties
             definitions. If this file exists in the project's root directory,
             it will be read and the properties it defines will be added to the

Modified: commons/proper/configuration/trunk/xdocs/userguide/howto_combinedconfiguration.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/xdocs/userguide/howto_combinedconfiguration.xml?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/xdocs/userguide/howto_combinedconfiguration.xml (original)
+++ commons/proper/configuration/trunk/xdocs/userguide/howto_combinedconfiguration.xml Thu Apr  2 05:42:41 2009
@@ -676,7 +676,10 @@
       <p>
         When merging elements attributes play a critical role. If an element has an attribute that
         appears in both sources, the value of that attribute must be the same for the elements to be
-        merged. Merging is only allowed between a single node in each of the files, so if an element
+        merged.
+      </p>
+      <p>
+        Merging is only allowed between a single node in each of the files, so if an element
         in the first file matches more than one element in the second file no merging will take
         place and the element from the first file (and its contents) are included and the elements
         in the second file are not. If the element is marked as a list node then the elements from

Added: commons/proper/configuration/trunk/xdocs/userguide/howto_filesystems.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/xdocs/userguide/howto_filesystems.xml?rev=761171&view=auto
==============================================================================
--- commons/proper/configuration/trunk/xdocs/userguide/howto_filesystems.xml (added)
+++ commons/proper/configuration/trunk/xdocs/userguide/howto_filesystems.xml Thu Apr  2 05:42:41 2009
@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+
+<document>
+
+ <properties>
+  <title>File Systems</title>
+  <author email="rgoers@apache.org">Ralph Goers</author>
+ </properties>
+
+<body>
+    <section name="File Systems">
+      <p>
+        In its default mode of operation Commons Configuration supports retrieving and storing
+        configuration files either on a local file system or via http. However, Commons
+        Configuration provides support for allowing other File System adapters. All file
+        access is accomplished through the <code>FileSystem</code> interface so accessing files
+        using other mechanisms is possible.
+      </p>
+      <p>
+        Commons Configuration also provides a second FileSystem which allows retrieval using
+        <a href="http://commons.apache.org/vfs">Apache Commons VFS</a>. As of this writing
+        Commons VFS supports 18 protocols for manipulating files.
+      </p>
+      <subsection name="Configuration">
+      <p>
+        The FileSystem used by Commons Configuration can be set in one of several ways:
+        <ol>
+          <li>A system property named "org.apache.commons.configuration.filesystem" can be defined
+          with the full class name of the desired <code>FileSystem</code> implementation to set the
+          default <code>FileSystem</code>.</li>
+          <li><code>FileSystem.setDefaultFilesystem()</code> can be called to directly set the
+          default <code>FileSystem</code> implementation.</li>
+          <li><code>DefaultConfigurationBuilder.setFileSystem()</code> can be called to set the
+          FileSystem implementation. <code>DefaultConfiguratonBuilder</code> will use this for each
+          configuration it creates</li>
+          <li><code>DefaultConfigurationBuilder</code> can be configured with the <code>FileSystem</code>
+          to be used when creating each of the configurations.</li>
+          <li>Each Configuration referenced in <code>DefaultConfigurationBuilder's</code>
+          configuration can be configured with the <code>FileSystem</code> to use for that
+          configuration.</li>
+          <li>Call setFileSystem() directly on any Configuration that implements <code>FileSystemBased.</code>
+          Both <code>AbstractFileConfiguration</code> and <code>AbstractHierarchicalFileConfiguration</code>
+          implement <code>FileSystemBased</code></li>
+        </ol>
+      </p>
+      <p>
+        The example that follows shows how to add <code>FileSystem</code> configuration to
+        <code>DefaultConfigurationBuilder</code>.
+      </p>
+     <source><![CDATA[
+<configuration>
+  <header>
+    <result delimiterParsingDisabled="true" forceReloadCheck="true">
+      <expressionEngine config-class="org.apache.commons.configuration.tree.xpath.XPathExpressionEngine"/>
+    </result>
+    <fileSystem config-class="org.apache.commons.configuration.VFSFileSystem"/>
+  </header>
+  <override>
+    <xml fileName="settings.xml" config-name="xml">
+      <fileSystem config-class="org.apache.commons.configuration.DefaultFileSystem"/>
+    </xml>
+  </override>
+</configuration>
+]]></source>       
+      </subsection>
+      <subsection name="File Options Provider">
+        <p>
+          Commons VFS allows options to the underlying file systems being used. Commons Configuration
+          allows applications to provide these by implementing the <code>FileOptionsProvider</code> interface
+          and registering the provider with the <code>FileSystem</code>. <code>FileOptionsProvider</code>
+          has a single method that must be implemented, <code>getOptions</code>, which returns a Map
+          containing the keys and values that the <code>FileSystem</code> might use. The getOptions
+          method is called as each configuration uses VFS to create a <code>FileOjbect</code> to
+          access the file. The map returned does not have to contain the same keys and/or values
+          each time it is called. For example, the value of the <code>currentUser</code> key can be
+          set to the id of the currently logged in user to allow a WebDAV save to record the userid
+          as a file attribute.
+        </p>
+      </subsection>
+      <subsection name="File Reloading Strategy">
+        <p>
+          The <code><a href="../apidocs/org/apache/commons/configuration/reloading/VFSFileMonitorReloadingStrategy.html">VFSFileMonitorReloadingStrategy</a></code>
+          can be used to cause Configurations accessed via the <code>VFSFileSystem</code> to be
+          monitored and reloaded when the files are modified. The example below shows how
+          <code>DefaultConfigurationBuilder</code> can be configured to use
+          <code>VFSFileMonitorReloadingStrategy</code>. While each declaration will result in
+          a new reloading strategy object, each instance will share a common <code>FileMonitor</code>.
+          The delay setting controls how often the <code>FileMonitor</code> checks for changes
+          and since there is only a single <code>FileMonitor</code>, only the largest value
+          specified on any <code>VFSFileMonitorReloadingStrategy</code> is used.
+          In the example below both test.properties and settings.xml would be checked for changes
+          once per minute.
+        </p>
+       <source><![CDATA[
+<configuration>
+  <header>
+    <result delimiterParsingDisabled="true" forceReloadCheck="true">
+      <expressionEngine config-class="org.apache.commons.configuration.tree.xpath.XPathExpressionEngine"/>
+    </result>
+    <fileSystem config-class="org.apache.commons.configuration.VFSFileSystem"/>
+  </header>
+  <override>
+    <properties fileName="test.properties" throwExceptionOnMissing="true">
+      <reloadingStrategy delay="60000"
+        config-class="org.apache.commons.configuration.reloading.VFSFileMonitorReloadingStrategy"/>
+    </properties>
+    <xml fileName="settings.xml" config-name="xml">
+      <reloadingStrategy
+         config-class="org.apache.commons.configuration.reloading.VFSFileMonitorReloadingStrategy"/>
+    </xml>
+  </override>
+</configuration>
+]]></source>
+      </subsection>
+    </section>
+
+</body>
+
+</document>

Propchange: commons/proper/configuration/trunk/xdocs/userguide/howto_filesystems.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/configuration/trunk/xdocs/userguide/user_guide.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/xdocs/userguide/user_guide.xml?rev=761171&r1=761170&r2=761171&view=diff
==============================================================================
--- commons/proper/configuration/trunk/xdocs/userguide/user_guide.xml (original)
+++ commons/proper/configuration/trunk/xdocs/userguide/user_guide.xml Thu Apr  2 05:42:41 2009
@@ -84,13 +84,13 @@
         <li><a href="howto_xml.html#Accessing_structured_properties">Accessing structured properties</a></li>
         <li><a href="howto_xml.html#Adding_new_properties">Adding new properties</a></li>
         <li><a href="howto_xml.html#Escaping_dot_characters_in_property_names">Escaping dot characters in property names</a></li>
+        <li><a href="howto_xml.html#Expression_engines">Expression engines</a></li>
+        <ul>
+          <li><a href="howto_xml.html#The_default_expression_engine">The default expression engine</a></li>
+          <li><a href="howto_xml.html#The_XPATH_expression_engine">The XPATH expression engine</a></li>
+        </ul>
+        <li><a href="howto_xml.html#Validation_of_XML_configuration_files">Validation of XML configuration files</a></li>
       </ul>
-      <li><a href="howto_xml.html#Expression_engines">Expression engines</a></li>
-      <ul>
-        <li><a href="howto_xml.html#The_default_expression_engine">The default expression engine</a></li>
-        <li><a href="howto_xml.html#The_XPATH_expression_engine">The XPATH expression engine</a></li>
-      </ul>
-      <li><a href="howto_xml.html#Validation_of_XML_configuration_files">Validation of XML configuration files</a></li>
       <li><a href="howto_compositeconfiguration.html#Composite_Configuration_Details">Composite Configuration Details</a></li>
       <ul>
         <li><a href="howto_compositeconfiguration.html#Setting_Up_Defaults">Setting Up Defaults</a></li>
@@ -114,17 +114,17 @@
         <li><a href="howto_configurationfactory.html#The_configuration_definition_file">The configuration definition file</a></li>
         <li><a href="howto_configurationfactory.html#Setting_up_a_ConfigurationFactory">Setting up a ConfigurationFactory</a></li>
         <li><a href="howto_configurationfactory.html#Accessing_properties">Accessing properties</a></li>
-      </ul>
-      <li><a href="howto_configurationfactory.html#Multiple_configuration_sources">Multiple configuration sources</a></li>
-      <ul>
-        <li><a href="howto_configurationfactory.html#Overriding_properties">Overriding properties</a></li>
-        <li><a href="howto_configurationfactory.html#Optional_configuration_sources">Optional configuration sources</a></li>
-      </ul>
-      <li><a href="howto_configurationfactory.html#Union_configuration">Union configuration</a></li>
-      <li><a href="howto_configurationfactory.html#Configuration_definition_file_reference">Configuration definition file reference</a></li>
-      <ul>
-        <li><a href="howto_configurationfactory.html#Setting_further_options">Setting further options</a></li>
-        <li><a href="howto_configurationfactory.html#Referencing_system_properties">Referencing system properties</a></li>
+        <li><a href="howto_configurationfactory.html#Multiple_configuration_sources">Multiple configuration sources</a></li>
+        <ul>
+          <li><a href="howto_configurationfactory.html#Overriding_properties">Overriding properties</a></li>
+          <li><a href="howto_configurationfactory.html#Optional_configuration_sources">Optional configuration sources</a></li>
+        </ul>
+        <li><a href="howto_configurationfactory.html#Union_configuration">Union configuration</a></li>
+        <li><a href="howto_configurationfactory.html#Configuration_definition_file_reference">Configuration definition file reference</a></li>
+        <ul>
+          <li><a href="howto_configurationfactory.html#Setting_further_options">Setting further options</a></li>
+          <li><a href="howto_configurationfactory.html#Referencing_system_properties">Referencing system properties</a></li>
+        </ul>
       </ul>
       <li><a href="howto_configurationbuilder.html#Using_DefaultConfigurationBuilder">Using DefaultConfigurationBuilder</a></li>
       <ul>
@@ -154,6 +154,12 @@
         <li><a href="howto_utilities.html#Interpolation_of_all_variables">Interpolation of all variables</a></li>
         <li><a href="howto_utilities.html#Handling_of_runtime_exceptions">Handling of runtime exceptions</a></li>
       </ul>
+      <li><a href="howto_filesystems.html#File_Systems">File Systems</a></li>
+      <ul>
+        <li><a href="howto_filesystems.html#File_Systems#Configuration">Configuration</a></li>
+        <li><a href="howto_filesystems.html#File_Systems#File_Options_Provider">File Options Provider</a></li>
+        <li><a href="howto_filesystems.html#File_Systems#File_Reloading_Strategy">File Reloading Strategy</a></li>
+      </ul>
     </ul>
     </section>