<?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.
-->
<!-- ===================================================================== -->
<!-- $Id$ -->
<!-- ===================================================================== -->
<document>
  <properties>
    <title>Changes</title>
    <author email="epugh@upstate.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="2.0" date="2016-03-24"
      description="Major redesign of the Configuration 1.x API">
      <action dev="oheger" type="update" issue="CONFIGURATION-621">
        Moved ConfigurationLogger class to io package to avoid cyclic
        dependencies between packages.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-620" due-to="Mark Vedder">
        Fixed two invalid examples in the user's guide for file-based
        configurations.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-619">
        CombinedConfigurationBuilder now supports inheritance of its parameters
        to child configuration sources. This is enabled by default.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-618">
        When using immutable configurations exceptions thrown by the wrapped
        configuration came out as UndeclaredThrowableException. This has been
        fixed; now the correct original exception is thrown.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-615">
        Changed generic types in the signatures of a MapConfiguration
        constructor and AbstractConfiguration.getList(String, List). These
        changes were made in version 1.10 as fixes for CONFIGURATION-557 and
        CONFIGURATION-558. But it had been missed to merge them to trunk.
      </action>
    </release>

    <release version="2.0-beta2" date="2015-12-05"
      description="Second beta release, some minor API changes.">
      <action dev="oheger" type="update" issue="CONFIGURATION-614">
        References to Commons Logging have been removed from the Configuration
        API. It is still possible to influence logging by making use of the new
        ConfigurationLogger abstraction.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-612" due-to="Jon Weygand">
        The return type of ConfigurationBuilder.getConfiguration() was changed
        from Configuration to ImmutableConfiguration because this is the base
        interface for all configuration objects.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-609">
        Fixed a bug in PropertiesConfiguration related to the loading of include
        files. The FileHandler used for this purpose was not fully initialized.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-608">
        Adapted the return type of ReloadingFileBasedConfigurationBuilder.configure().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-605">
        XMLConfiguration no longer drops keys when list delimiter characters
        occur in element values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-604">
        Fixed a problem in the conversion of a flat configuration to a
        hierarchical one that could cause the loss of properties in a
        combined configuration constructed by an override combiner.
      </action>
    </release>

    <release version="2.0-beta1" date="2015-06-19"
      description="First beta release, getting closer to final.">
      <action dev="oheger" type="update" issue="CONFIGURATION-598" due-to="Bjarne Bostr&#xF6;m">
        Removed obsolete ConfigurationBuilder interface in the base package.
      </action>
    </release>

    <release version="2.0-alpha2" date="2014-12-20"
      description="Some more API fine-tuning.">
      <action dev="oheger" type="add" issue="CONFIGURATION-574">
        DefaultExpressionEngine can now be customized to match configuration
        keys in a case-insensitive manner. This is useful for instance for
        dealing with Windows INI files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-565">
        Added support for querying encoded properties.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-564">
        PropertiesConfiguration now supports again properties without a value
        and a separator character. The keys of such properties are added to
        the configuration with an empty String as value.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-427">
        XMLPropertyListConfiguration can now save arrays in the correct form.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-200">
        A size() method was added to the ImmutableConfiguration interface.
      </action>
    </release>

    <release version="2.0-alpha1" date="2014-09-23"
      description="First alpha release after a major redesign.">
      <action dev="oheger" type="update" issue="CONFIGURATION-591">
        Removed methods from ConfigurationConverter related to ExtendedProperties.
        This class is no longer supported by recent versions of Commons
        Collections.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-590">
        Removed Serializable interface from all configuration implementations.
        Some configuration classes declared this interface without being
        actually serializable.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-588">
        The name of the top-level package and the maven coordinates have been
        changed to allow a coexistence of Commons Configuration 1.x with 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-584">
        The event mechanism has been reworked. There is now a generic event
        listener interface which can be used to receive notifications from
        multiple types of event sources.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-582">
        Fixed a StringIndexOutOfBoundsException in PropertiesConfigurationLayout
        which was caused by lines containing only whitespace.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-579">
        A migration guide has been created which supports when upgrading from
        version 1.x to 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-578">
        The user's guide has been fully reworked to cover all new and enhanced
        features of version 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-577">
        The dependency to Commons Collections is no longer needed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-576">
        A new abstract base class for hierarchical configurations was introduced
        which supports arbitrary hierarchical data structures. The type of the
        nodes used by the configuration can now be specified as a generic type
        argument. This makes the integration of other hierarchical structures
        easier.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-575">
        Hierarchical configurations now operate on immutable structures.
        Data is no longer represented by ConfigurationNode objects. The
        ImmutableNode class now serves as data container.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-573">
        XPathExpressionEngine can now deal with namespace prefixes in node and
        attribute names.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-572">
        When a CombinedConfiguration is cleared it removes itself as change
        listener from all child configurations. This fixes a possible memory
        leak.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-570">
        Fixed a possible ConcurrentModificationException when a SystemConfiguration
        instance is passed to the append() or copy() methods.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-567" due-to="Shen liang">
        XMLBeanDeclaration now escapes node names before they are used to
        determine nested properties.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-563">
        The DefaultExpressionEngine class is now immutable. An instance can be
        shared between multiple configuration objects.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-562">
        Improved the API of ExprLookup.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-559">
        It is now possible to define default values for initialization
        properties of configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-555">
        Fixed a bug in the handling of the xml:space attribute in
        XMLConfiguration. The attribute is now also applied to the current
        element, not only to sub elements.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-554">
        BeanHelper is no longer a static utility class. Instances can be
        created with a specific configuration of bean factories. There is still
        a default instance which can be obtained via the BeanHelper.INSTANCE
        field.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-553">
        The code for accessing configuration files hs been reworked. Methods
        related to locating configuration files have been moved from
        ConfigurationUtils to a new FileLocatorUtils class. Customizable
        strategy classes (implementing the new FileLocationStrategy) can be
        used for searching for configuration files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-551">
        The data type conversion mechanism has been made extensible. There is a
        new interface ConversionHandler which controls the data type conversions
        available for a configuration object. By setting a custom implementation,
        conversions can be adapted or extended.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-550">
        Conversion to Character is now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-546" due-to="Justin Couch">
        BeanHelper can now process BeanDefinitions initializing properties of
        collection types of their target beans.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-544" due-to="Oliver Kopp">
        Added missing dependencies to build.xml.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-542">
        The mechanism for synchronizing configurations has been completely
        redesigned. It is now based on Synchronizer objects which can be
        configured by client code. A new chapter was added to the user's guide
        regarding thread-safety of configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-540">
        MapConfiguration now directly uses a Properties object passed to its
        constructor as data store rather than copying it. This allows
        SystemConfiguration to be connected to system properties; i.e.
        changing a property through SystemConfiguration immediately affects
        the corresponding system property.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-541">
        Multi-file configurations are no longer restricted to XML configuration
        files. Arbitrary file-based configurations are now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-539">
        The deprecated INIConfiguration class was removed.
        HierarchicalINIConfiguration was renamed to INIConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-537">
        The deprecated ConfigurationFactory class was removed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-536">
        File-based configurations are now implemented in a different way.
        The interfaces FileConfiguration and ReloadingStrategy have been
        removed, also the base classes AbstractFileConfiguration and
        AbstractHierarchicalFileConfiguration. They are replaced by the
        FileBased interface and the FileHandler class which implements
        central I/O functionality. Reloading is now in the responsibility of
        configuration builders.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-535">
        DatabaseConfiguration now provides get methods for querying its
        properties defining the underlying database structures.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-534">
        The includesAllowed property of PropertyConfiguration is now independent
        from the existence of a base path.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-533">
        DatabaseConfiguration now automatically converts CLOBs to strings if
        they appear in property values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-530">
        Concurrent access to configurations and reloading have been completely
        redesigned. Because reloading is now handled by configuration builders
        there is no need to acquire a lock in order to protected against a
        reload operations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-527" due-to="Matthias Richter">
        AbstractConfiguration.clearPropertyDirect() is now abstract.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
        XMLPropertiesConfiguration now supports loading from and saving to DOM
        nodes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-525">
        PropertiesConfiguration now keeps a comment at the bottom of a
        properties file. A new footer property was added for reading and
        writing this footer comment.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-524">
        Interpolation now works correctly after a configuration was cloned.
        The ConfigurationInterpolator instance is now cloned, too.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-521" due-to="Oliver Kopp">
        ConfigurationUtils.fileFromUrl() now correctly handles URL containing
        encoded percent characters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-520">
        Support for reloading of configuration data has been reworked.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-519">
        Configuration objects are now created via configuration builders. A new
        API for configuration builders has been added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-518">
        Classes and interfaces related to interpolation have been slightly
        reworked. ConfigurationInterpolator is now thread-safe. There are
        multiple ways to define the ConfigurationInterpolator object to be
        used by an AbstractConfiguration instance.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-517">
        Hierarchical configurations now provide methods to obtain sub
        configurations for all child elements of a given key.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-516">
        PropertiesConfiguration no longer escapes double quotes on saving.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-515">
        The visibility of some internal methods of PropertiesConfiguration.PropertiesWriter
        has been increased to protected. This simplifies the implementation of
        a custom escaping strategy.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-514">
        Bean declarations now support constructor invocations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-513">
        HierarchicalConfiguration is now an interface. The base implementation
        class is named BaseHierarchicalConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-512">
        It is now possible to obtain an immutable view on a Configuration or
        HierarchicalConfiguration object. New interfaces,
        ImmutableConfiguration, and ImmutableHierarchicalConfiguration have
        been introduced.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-508">
        Generic get() methods have been added to the Configuration interface.
        These methods expect a target class and try to convert the value of
        the specified property to this target class.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-506">
        Removed obsolete nested classes Node and NodeVisitor of
        HierarchicalConfiguration. The related deprecated class
        ConfigurationKey was removed, too.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-505">
        XMLConfiguration no longer supports attributes with multiple values or
        list delimiter parsing in attributes. This feature was complex and
        error prone and brought little value to the user.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-504">
        SubnodeConfiguration now provides a new method for clearing it and
        removing its root node from the parent configuration. The method
        HierarchicalConfiguration.configurationsAt() now returns a list
        of SubnodeConfiguration so that it is easier to make direct use of
        this feature.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-500">
        XMLConfiguration now adds attributes of elements defining a list to
        all list nodes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-496">
        Concurrent access to configurations and reloading have been completely
        redesigned. This should reduce the amount of synchronization.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-486">
        Removed some static fields for specifying global default values.
        Using static fields in this way is thread-hostile. There are now
        alternatives for setting default values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-462">
        Updated dependency to Commons Lang from version 2.6 to 3.1.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-419">
        EventSource is now an interface. With BaseEventSource there is a
        default implementation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-418">
        The handling of list delimiters and their escape characters has been
        reworked. A new ListDelimiterHandler interface was introduced allowing
        applications to customize the treatment of list delimiters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-330">
        Concurrent access to configurations has been reworked.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-204">
        With the new reloading mechanism automatic and periodic reloading checks
        can be performed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-202">
        Reloading checks can now be performed in a background thread.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-153">
        It is now possible to define the strategy used for locating
        configuration files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-136">
        Reloading can no longer corrupt a configuration instance. This is now
        handled by a configuration builder; the original configuration instance
        is not modified.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-26">
        It is now possible to influence the conversion from a container object
        (a collection or an array) to a single value (e.g. what is returned by
        getString() if the current property has multiple values). Per default,
        the first value is returned. By overriding methods of the
        configuration's ConversionHandler, this behavior can be changed.
      </action>
    </release>

    <release version="1.10" date="2013-10-27"
      description="Minor bug fixes and improvements">
      <action dev="oheger" type="update" issue="CONFIGURATION-500">
        XMLConfiguration now adds attributes of elements defining a list to
        all list nodes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-525">
        PropertiesConfiguration now keeps a comment at the bottom of a
        properties file. A new footer property was added for reading and
        writing this footer comment.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
        XMLPropertiesConfiguration now supports loading from and saving to DOM
        nodes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-534">
        The includesAllowed property of PropertyConfiguration is now independent
        from the existence of a base path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-546" due-to="Justin Couch">
        BeanHelper can now process BeanDefinitions initializing properties of
        collection types of their target beans.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-550">
        Conversion to Character is now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-555">
        Fixed a bug in the handling of the xml:space attribute in
        XMLConfiguration. The attribute is now also applied to the current
        element, not only to sub elements.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-556">
        In 1.7 and before, any change to the system properties was
        immediately reflected in a SystemConfiguration object. This
        behaviour broke in 1.8 and 1.9. This has been fixed for 1.10.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-557">
        In 1.7 and before, it was possible to pass an arbitrary Map
        into the constructor of MapConfiguration. With the
        generification in 1.8, this actually broke and it was no
        longer possible to pass in e.g. a Map&lt;String, String&gt;
        because the signature now required a Map&lt;String,
        Object&gt;. Changing the constructor to accept a
        Map&lt;String, ?&gt; restores this.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-558">
        Similar to CONFIGURATION-557, the getList(String, List) method
        was generified to be getList(String, List&lt;Object&gt;) but
        needs to be getList(String, List&lt;?&gt;) so that code that
        used a more specific list (such as a List&lt;String&gt;) still
        compiles against the new API.
      </action>
    </release>

    <release version="1.9" date="2012-08-22"
      description="Minor bug fixes and improvements">
      <action dev="oheger" type="update" issue="CONFIGURATION-503" due-to="Tino Sino">
        Small changes in user guide documentation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-502" due-to="Tino Sino">
        Improvements of basic features and AbstractConfiguration documentation.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-501">
        XMLPropertyListConfiguration no longer swallows exception caused by
        invalid date properties. Now a warning message is logged.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-495">
        List properties can now be set correctly on a HierarchicalConfiguration
        if delimiter parsing is disabled.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-488">
        Made static DateFormat fields in XMLPropertyListConfiguration.PListNode
        final and added a note about proper synchronization.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-487">
        DataConfiguration.get() now also works with String properties and if no
        data type conversion is required.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-483">
        DatabaseConfiguration now always closes the result set.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-482" due-to="Chris Seieroe">
        The Import-Package section in the OSGi manifest now uses the
        resolution:=optional directive for optional dependencies.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-481">
        Variable substitution in configuration sources declared in a definition
        file for DefaultConfigurationBuilder now works across multiple sources.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-477">
        PropertyListConfiguration now can deal with C-style comments in plist
        configuration files. Both block and single-line comments are supported.
      </action>
    </release>

    <release version="1.8" date="2012-02-04"
      description="Support for Java 1.5">
      <action dev="oheger" type="fix" issue="CONFIGURATION-476">
        Fixed possible ClassCastExceptions in CompositeConfiguration related to
        special in-memory configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-475">
        Class ConfigurationKey was deprecated in favor of DefaultConfigurationKey.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-474">
        Implemented delimiter parsing in HierarchicalINIConfiguration to be
        consistent with other Configuration implementations. Note that this can
        impact existing code. To switch back to the old behavior, call
        setDelimiterParsingDisabled(true) before loading the configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-471">
        CompositeConfiguration now provides better support for child
        configurations that are used as in-memory configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-470">
        Classes generated by JavaCC are now created dynamically during the
        build process.
      </action>
      <action dev="ebourg" type="add">
        Commons Configuration now requires Java 5 or later.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-466">
        Binary literals are now supported (i.e Ob11010001).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-465">
        Updated the dependency to Commons Jexl to version 2.1.1. This version
        provides correct OSGi manifest headers.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-463">
        Improved documentation of AbstractFileConfiguration related to load()
        methods and their impact on the base path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-461">
        The project now uses standard Maven directory layout.
      </action>
    </release>

    <release version="1.7" date="2011-09-07"
      description="Many bugfixes, some new features.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-460">
        Reloading now also works for configuration sources declared in the
        additional section of a configuration definition file for
        DefaultConfigurationBuilder.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-459">
        ConfigurationFactory has been deprecated. The user guide was updated to
        no more mention this class.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-458">
        HierarchicalConfiguration now provides a specific implementation of the
        clear() method. This is more efficient and also solves some other
        problems related to clearing a SubnodeConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-456">
        Improved Javadocs of getKeys(String) method for some configuration
        classes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-455">
        HierarchicalINIConfiguration.getSection() now creates a section if it
        does not exist. The SubnodeConfiguration returned by this method is now
        always connected to the parent ini configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-452">
        XPathExpressionEngine now provides better support for the setProperty()
        method.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-448">
        The parsing of ini files has been improved for property definitions
        containing multiple separator characters.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-447">
        DefaultConfigurationBuilder now supports including environment properties
        using the "env" tag.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-446">
        XMLConfiguration now handles attributes correctly whose value is an
        empty string.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-445">
        Transforming a CombinedConfiguration with ViewNodes to an
        XMLConfiguration could cause problems with attributes. This has been
        fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-439">
        Child configuration builders created for a &lt;configuration&gt; element
        in a configuration definition file now inherit the configuration and
        error listeners from the original DefaultConfigurationBuilder. This
        makes it possible to suppress log output created for optional
        configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-438" due-to="Mike Noordermeer">
        JNDIConfiguration.getKeys() no more logs an exception if the prefix does
        not exist.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-437">
        Child configuration builders created for a &lt;configuration&gt; element
        in a configuration definition file now inherit some of their properties
        from the builder object which processed the file.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-436">
        The optional dependency to Apache Ant has been changed to the new
        groupId org.apache.ant. The version was updated to the most recent
        version 1.8.2 (older versions should still work).
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-434">
        HierarchicalINIConfiguration now recognizes comment characters in
        property definitions only if they are preceded by whitespace. Thus
        comment characters can now be part of the property value. This is for
        instance required for the definition of file paths which use the
        semicolon as path separator.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-433">
        Minor improvements of the support for indexed properties in
        ConfigurationDynaBean.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-432">
        The methods getList() and getStringArray() of AbstractConfiguration can
        now handle single-valued properties of primitive types.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-428">
        XMLConfiguration no longer escapes backslashs in the values of
        XML elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-424">
        HierarchicalINIConfiguration now works correctly with configurations
        that contain only properties in the global section.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-423" due-to="William Buckley">
        testFromClassPath() can fail when it should not because of inconsistent escaping of output from
        PropertiesConfiguration.getURL() and FileChangedReloadingStrategy.getFile().toURL().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-418">
        A bug related to the interpretation of escape sequences for backslashes
        has been fixed. The user guide has also been improved in this area.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-415">
        Files with a plus character in their names are now handled correctly.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-413" due-to="Alexander Prishchepov">
        SubsetConfiguration now produces correct events.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-412">
        DatabaseConfiguration can now be instructed to perform a commit after an
        update of the managed database table. This makes it usable in
        environments where the connections do not use auto-commit mode.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-410">
        Added a refresh() method to AbstractFileConfiguration and
        AbstractHierarchicalFileConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-409">
        HierarchicalINIConfiguration now correctly saves sections whose name
        contains delimiter characters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-408">
        PropertiesConfiguration.save() escaped slashes in properties values.
        This was caused by a bug in commons-lang 2.4. Updating to the new
        version commons-lang 2.5 fixed this problem.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-407">
        Fixed a potential IllegalStateException in HierarchicalINIConfiguration
        that can be thrown when the global section is requested concurrently.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-405">
        XMLPropertyListConfiguration no longer throws a ConfigurationException
        if the file to be loaded does not have an outer dict element.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-404" due-to="Rob Walker">
        The default expression engine used by hierarchical configurations used to
        throw a NumberFormatException if invalid indices were used in property
        keys. This has been fixed. As a side effect brackets can now be used in
        property keys.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-403">
        When an empty XMLConfiguration was saved and reloaded the root element
        was assigned an empty text value. Because of this isEmpty() returned
        false for this configuration. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-399">
        Default variable interpolation now supports the env: prefix for
        referencing environment variables.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-397">
        Schema violation exceptions are now propagated back to the caller.
      </action>
       <action dev="rgoers" type="fix" issue="CONFIGURATION-390">
        XMLConfiguration and CombinedConfiguraton are now synchronized to fix problems
        caused by reloading in a multithreaded environment.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-396">
        HierarchicalConfiguration.NodeVisitor is now passed the correct key to
        its visitAfterChildren() method.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-393">
        BaseConfiguration.clone() now also clones collections stored in the
        internal map. This causes list properties to be handled correctly.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-389">
        DefaultConfigurationBuilder now supports defining ini files in its
        configuration definition file.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-388">
        Attribute or element values will not be escaped when attribute or element splitting are disabled.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-363">
        When using Commons Lang 2.6 or higher as dependency nested interpolation
        in variable names is supported.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-362">
        Empty dictionaries in a PropertyList configuration are now preserved when the configuration is saved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-385">
        DatabaseConfiguration now generates correct events for the clear() and
        clearProperty() methods.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-380">
        Add ExprLookup to allow expressions to be evaluated in configurations. When
        used, this requires that Apache Commons Jexl be added as a dependency to
        projects using Commons Configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-374">
        MapConfiguration now provides a way of controlling the trimming
        behavior.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-378">
        Added MergeCombiner to allow elements in two configurations to be merged when the
        element and attributes in the first file match those in the second file.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-340">
        File system access has been abstracted to a FileSystem interface. Two implementations
        are provided, DefaultFileSystem that behaves in a backward compatible manner and
        VFSFileSystem which uses Commons VFS to retreive and store files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-314">
        PropertiesConfigurationLayout now allows setting the line separator to
        be used when writing the properties file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-371">
        PropertiesConfigurationLayout now also stores the property separators used for
        the single properties. It is also possible to change them for specific
        properties or set a global properties separator. In earlier versions
        the separator was hard-coded to &quot; = &quot;.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-370">
        PropertiesConfiguration now defines a nested interface IOFactory. Using
        this interface it is possible to inject custom PropertiesReader and
        PropertiesWriter implementations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-368">
        SubnodeConfiguration now fires an event of type EVENT_SUBNODE_CHANGED
        if a structural change of the parent configuration was detected. If the
        SubnodeConfiguration is contained in a CombinedConfiguration, the
        CombinedConfiguration receives this event and can update itself.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-361">
        MultiFileHierarchicalConfiguration was not using basepath to
        construct the file url. It also threw an exception if the
        file pattern resolved to a non-existent file. This is now
        configurable.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-375">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration. SubsetConfiguration will now also interpolate
        keys of the parent configuration or use the local lookups of its
        parent. SubnodeConfiguration is in turn now able to lookup local
        keys as well.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-376">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-377">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration.
      </action>
      <action dev="joehni" type="fix" issue="CONFIGURATION-369">
        SubsetConfiguration did not use locally registered lookups of its
        interpolator.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-359">
        Fixed broken links to the API documentation in the user's guide.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-358">
        Improvements of the user's guide for hierarchical configurations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-357">
        The message of the ConversionException thrown by
        AbstractConfiguration.getBigInteger() is now correct.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-356">
        Added getConfigurations and getConfigurationNameList.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-257">
        Allow configurations to be validated using XML Schemas.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-355">
        Allow configurations to be validated using XML Schemas.
      </action>
    </release>

    <release version="1.6" date="2008-12-25"
      description="Another set of smaller bug fixes">
      <action dev="oheger" type="update">
        Some dependencies to other Commons components have been updated to the
        recent versions. Affected are Commons Lang, Commons Collections,
        Commons Logging, Commons BeanUtils, and Commons JXPath. The older
        versions should still work.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-353">
        Allow system properties to be set from a configuration file.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-351">
        Allow variable resolvers to be defined configured in
        DefaultConfigurationBuilder.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-350">
        Added MultiFileHierarchicalConfiguration, DynamicCombinedConfiguration
        and PatternSubtreeConfigurationWrapper.
      </action>
      <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.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-347">
        AbstractFileConfiguration.getKeys() now returns an iterator that points
        to a snapshot of the keys of the configuration. This prevents
        ConcurrentModificationExceptions during iteration when a reload is
        performed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-346">
        ConfigurationUtils.convertToHierarchical() now creates multiple
        configuration nodes for properties with multiple values. This
        improves compatibility with queries.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-345">
        PropertiesConfiguration now per default uses the encoding "ISO-8859-1"
        for loading properties files.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-344">
        CombinedConfiguration could cause a deadlock when it was accessed while
        concurrently a reload of one of its child configuration happened. This
        was fixed by reducing synchronization where it is not strictly
        necessary.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-341">
        The "force reload check" mechanism of CombinedConfiguration now also
        works with sub configurations created by configurationAt().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-339">
        When performing interpolation the methods getList() and getStringArray()
        of CompositeConfiguration did not take the order of child configurations
        into account. This could lead to wrong interpolated values when the key
        was contained in multiple child configuration. Interpolation is now
        always done in the correct order.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-338" due-to="David Donn">
        PropertiesConfiguration now also performs interpolation when searching
        for include files. This means that the name of a file to include can be
        determined by another property.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-337" due-to="Ralph Goers">
        DefaultConfigurationBuilder now supports defining new configuration
        providers in the configuration definition file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-336">
        When converting a flat configuration to a hierarchical one it is now
        possible to specify the expression engine to be used for this purpose.
        This may be necessary if the flat configuration contains keys with
        special characters interpreted by the expression engine.
        CombinedConfiguration defines the new setConversionExpressionEngine()
        method. The expression engine passed to this method will be used when
        converting flat child configurations to hierarchical ones.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-335">
        XMLConfiguration now allows disabling the attribute splitting mechanism
        introduced in the 1.5 release (as part of the fix for CONFIGURATION-268).
        This may be necessary for correctly processing attributes containing
        both the list delimiter and the attribute delimiter character. The new
        property &quot;disableAttributeSplitting&quot; was added for this
        purpose.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-334">
        Made handling of parent nodes more consistent when setRoot() or
        setRootNode() of HierarchicalConfiguration are involved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-332">
        Properties written through a DataConfiguration to a wrapped
        PropertiesConfiguration got lost when the PropertiesConfiguration was
        saved. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-331">
        XMLBeanDeclaration now defines a factory method createBeanDeclaration()
        for creating the declarations for complex nested properties. This
        method can be overridden by derived classes for injecting custom
        BeanDeclaration implementations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-328">
        A bug in XMLConfiguration.addNodes() made it impossible to add
        attribute nodes using this method. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-327">
        INIConfiguration misinterpreted variables in the global section with
        a dot in their name as section names. HierarchicalINIConfiguration fixes
        this problem.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-326">
        INIConfiguration does not support obtaining a subset for the global
        section. HierarchicalINIConfiguration provides the getSection() method
        that returns the content of the global section if null is passed in as
        section name.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-325">
        INIConfiguration does not return the global section in its getSections()
        method. HierarchicalINIConfiguration fixes this problem.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-324">
        HierarchicalINIConfiguration adds support for line continuation.
      </action>
      <action dev="oheger" type="update">
        INIConfiguration has been deprecated. Its functionality is now available
        through the new HierarchicalINIConfiguration class.
      </action>
      <action dev="oheger" type="add">
        With HierarchicalINIConfiguration a complete new Configuration
        implementation for parsing Windows INI files is available. This new
        class is a full replacement of INIConfiguration and addresses some of its
        shortcomings. Being derived from HierarchicalConfiguration it offers
        the enhanced functionality of hierarchical configurations.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-322">
        ConfigurationDynaBean now works properly with indexed properties
        stored internally in the underlying configuration as arrays.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-321">
        The iterator returned by HierarchicalConfiguration.getKeys(String prefix)
        now also contains the prefix if this key is contained in the
        configuration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-320">
        XMLPropertyListConfiguration is no longer limited to 32 bits integers.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-318">
        When an XMLConfiguration is created using the copy constructor, the name
        of the root element is now preserved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-316">
        Changing the text of the root element of an XMLConfiguration had no
        effect when the configuration was saved. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-315">
        CombinedConfiguration used to send two EVENT_COMBINED_INVALIDATE events
        for each modified child configuration. Now this event is sent only
        once after the affected child configuration was updated.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-307">
        XMLConfiguration now supports the xml:space attribute. This attribute
        can be used to preserve whitespace in the content of XML elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-306">
        INIConfiguration now preserves whitespace in quoted values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-302">
        If a change has been detected by FileChangedReloadingStrategy, the
        reloadingRequired() method will now return true until
        reloadingPerformed() has been called.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-301">
        Fixed a NullPointerException that could be thrown under certain
        circumstances when saving an XMLConfiguration that was created using
        the constructor that takes a HierarchicalConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-309">
        Instantiating an XMLPropertyListConfiguration no longer fails
        if the DTD is missing from the classpath.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-300">
        It's now possible to read a configuration file containing
        a '#' in its name (requires Java 1.4 or above).
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-260">
        Fixed the date format for XMLPropertyListConfiguration.
      </action>
    </release>

    <release version="1.5" date="2007-11-24" description="Many smaller bugfixes">
      <action dev="oheger" type="update" due-to="J&#xF6;rg Schaible">
        Some of the dependencies in the m2 pom have been updated to be more
        consistent.
      </action>
      <action dev="oheger" type="update" due-to="J&#xF6;rg Schaible">
        The dependency to commons-logging was updated to the current version
        1.1. Older versions of commons-logging will still work.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-273">
        A new method interpolatedConfiguration() was added to AbstractConfiguration.
        This method returns a configuration with the same type and
        content as the original configuration, however all variables have been
        resolved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-299">
        Resolving of variables with the prefix const (constant fields) caused
        a ClassCastException under certain circumstances if non-String fields
        were involved. This has been fixed.
      </action>
      <action dev="oheger" type="update" due-to="Nicolas De Loof">
        The dependencies to commons-codec and commons-jxpath have been marked
        as optional. They are not required by the core classes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-284" due-to="Nicolas De Loof">
        There is a new configuration implementation EnvironmentConfiguration,
        which provides access to (OS) environment variables. On Java &gt;= 1.5
        this class can be directly used; on earlier versions a dependency to ant
        is required.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-296">
        A bug in XMLConfiguration caused that attributes of the root element
        could not be changed. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-290">
        A new method registerEntityId() was added to XMLConfiguration, which
        allows to register URLs for entities. A new default implementation of
        the EntityResolver interface handles these entities automatically.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-295">
        The subset() method of HierarchicalConfiguration now takes the value of
        the subset's root node into account if it is not ambigous.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-294">
        Nodes added to a XMLConfiguration using the addNodes() method could
        lose their value when the configuration was saved. This is now fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-272">
        New copy() and append() methods have been added to AbstractConfiguration.
        They replace the methods with the same names in ConfigurationUtils,
        which do not handle all features of AbstractConfiguration properly (e.g.
        list delimiters in property values are incorrectly treated). To avoid
        such problems, the new methods should be used.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-291">
        The addNodes() method of hierarchical file-based configurations now
        correctly triggers an auto save.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-287">
        HierarchicalConfiguration.addNodes() now resets the reference property
        of all nodes to be added. This fixes a problem with XMLConfiguration,
        which now detects the added nodes as new and treats them correctly when
        the configuration is saved.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-285">
        DefaultConfigurationBuilder will now notify registered error listeners
        about optional configuration sources that could not be created. Before
        exceptions thrown by optional configurations were swallowed
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-283">
        ConfigurationUtils.convertToHierarchical() now correctly deals with
        property values containing escaped list delimiters. This also affects
        CombinedConfiguration when sub configurations with such property values
        are contained.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-275">
        AbstractConfiguration.addProperty() now correctly deals with list and
        array properties if delimiter parsing is disabled.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-282">
        The default expression engine used by HierarchicalConfiguration
        instances is now lazily initialized. This avoids NullPointerExceptions
        in certain server environments after a redeploy.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-281">
        Cycles in the JNDI tree no longer cause a stack overflow in
        JNDIConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-277">
        The base implementation of clear() in AbstractConfiguration now checks
        for a potential UnsupportedOperationException when iterating over the
        existing properties.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-280"
        due-to="Roman Kurmanowytsch">
        Using file-based configurations in auto-save mode together with a
        reloading strategy could cause data loss. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-279">
        A PropertiesConfiguration that was created from a non existing file
        lost its content when it was saved. This problem has been solved.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-215">
        A new getSource() method was added to CompositeConfiguration and
        CombinedConfiguration, which returns the child configuration, in which
        a given property is defined.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-274">
        PropertiesConfiguration now supports escaping the escape character for
        list delimiters.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-269">
        PropertiesConfiguration no longer escapes the list delimiter on saving
        if the list delimiter has been disabled.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-270">
        List properties and properties containing interpolated variables
        are now properly saved by INIConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-268">
        When delimiter parsing was disabled for XMLConfiguration, saving and
        loading the configuration accidently added escape characters to properties
        containing the list delimiter character. This has been fixed. It is now
        also possible to escape the escape character itself.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-253">
        The return value of FileConfiguration.getFile() is now always
        consistent with the result of getURL().
      </action>
      <action dev="ebourg" type="update">
        INIConfiguration uses the platform's specific line separator instead
        of the Windows line separator.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-267">
        INIConfiguration flushes the output at the end of a save operation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-265">
        For hierarchical file-based configurations the auto-save mechanism is
        now also triggered if a subnode configuration is changed. In such a case
        the new event type EVENT_SUBNODE_CHANGED will be sent to registered
        listeners.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-266" due-to="Tobias Noebel">
        ConfigurationInterpolator now also invokes the default lookup object for
        variables with a prefix that could not be resolved by their associated
        lookup object.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-264">
        A SubnodeConfiguration per default does not see certain changes of its
        parent configuration (e.g. reloads). With a new boolean parameter of
        HierarchicalConfiguration's configurationAt() method a mode can be
        enabled, in which the subnode configuration checks for such changes and
        reconstructs itself if necessary.
      </action>
      <action dev="ebourg" type="fix">
        byte[] properties are properly saved as data fields in the plist
        configurations (PropertyListConfiguration and XMLPropertyListConfiguration).
      </action>
      <action dev="ebourg" type="add">
        DataConfiguration now supports java.net.InetAddress,
        javax.mail.internet.InternetAddress, and Java 5 enumeration types.
        Properties are converted to these types using the new generic getters.
      </action>
      <action dev="ebourg" type="fix">
        The object getters in DataConfiguration with no default value
        (i.e getURL(key)) now throw a NoSuchElementException if the flag
        throwExceptionOnMissing is set.
      </action>
      <action dev="ebourg" type="add">
        Generic get methods have been added to DataConfiguration (get(),
        getArray() and getList())
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-263">
        XMLConfiguration used to drop attributes when an element's value was a
        list. This has been fixed.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-249">
        File configurations can now be saved to FTP URLs, or any other URL
        protocol supporting data output.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-180">
        Fixed a potential issue in DatabaseConfiguration where an error on
        closing a statement would prevent the connection from being closed.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-261">
        Date objects are now supported in ASCII plist files.
      </action>
      <action dev="ebourg" type="update">
        XMLPropertyListConfiguration no longer requires commons-digester and
        commons-beanutils to work.
      </action>
      <action dev="ebourg" type="update">
        Fixed INIConfiguration to handle the quoted values and the lines
        containing a value and a comment.
      </action>
    </release>

    <release version="1.4" date="2007-04-08" description="Improved interpolation, configuration for INI files, reloading strategy triggered with JMX, bug fixes.">
      <action dev="oheger" type="update" issue="CONFIGURATION-256">
        MapConfiguration and the web-based configurations now treat strings
        that contain an escaped list delimiter correctly: The escape character
        will be removed, so that for instance "foo\,bar" becomes "foo,bar".
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-255">
        DatabaseConfiguration now handles list delimiters in property values
        correctly.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-254" due-to="Carsten Kaiser">
        After cloning a XMLConfiguration there was still a connection to the
        original configuration. So when the clone was modified and then saved
        the content of the original configuration was written. This has now
        been fixed.
      </action>
      <action dev="oheger" type="update">
        Class loading in BeanHelper is now done using ClassUtils of Commons
        Lang.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-237" due-to="Nicolas de Loof">
        With ManagedReloadingStrategy a new reloading strategy for file-based
        configurations was added that can be triggered through JMX.
      </action>
      <action dev="oheger" type="update">
        The dependencies to Commons Lang, Commons Collections, and Commons Digester
        are updated to use the recent available version. However older versions
        will still work.
      </action>
      <action dev="oheger" type="add">
        A pom for maven 2 was added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-252">
        ConfigurationUtils.getFile() now always checks first whether the passed
        in file name is absolute. If it is, this file will be returned. This
        prevents that on Unix under certain circumstances absolute file names
        are interpreted as relative ones.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-251">
        The dependency to xml-apis was changed to the version 1.0.b2. The so
        far used version 2.0.2 is reported to be bogus.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-245">
        In addition to configuration event listeners now so-called configuration
        error listeners are supported. These listeners are notified about
        internal errors that had been logged and swallowed by privious versions.
        The new enableRuntimeExceptions() method of ConfigurationUtils
        registers a special error listener at the passed in configuration that
        generates a runtime exception when an error event is received.
      </action>
      <action dev="oheger" type="add">
        AbstractConfiguration now allows to set an instance specific logger
        using the setLogger() method. This gives clients more control over a
        configuration's logging behavior.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-155">
        SubsetConfiguration and CompositeConfiguration were updated to fully
        support an instance specific list delimiter. Concerning splitting of
        string properties that contain a list delimiter character, these
        classes now behave like a "normal" configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-192">
        Variable interpolation features have been improved. A variable can now
        have the form ${prefix:variableName} where the prefix
        defines the type of the variable. The standard types sys for
        system properties and const for constants are supported.
        Variables without a prefix are treated as references to other
        configuration properties (which is compatible to earlier versions).
      </action>
      <action dev="oheger" type="update">
        Commons Configuration now depends on Commons Lang 2.2. Some features
        of Lang's new text package are used.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-244">
        The number of dependencies needed for DefaultConfigurationBuilder was
        reduced by letting some of the default configuration providers resolve
        their classes per reflection.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-240">
        File-based configurations with a reloading strategy did not work well
        together with CombinedConfiguration because the reloading strategy is
        only checked when its associated configuration is accessed (which does
        not happen when only the combined configuration is queried).
        As a workaround CombinedConfiguration now provides the boolean
        forceReloadCheck property. If this is set to true, all contained
        configurations will be triggered when a property is queried. This will
        cause a reload if necessary.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-243">
        Configuration declarations in the configuration definition file for
        DefaultConfigurationBuilder that are marked as optional now support a
        new attribute config-forceCreate. If this attribute is set
        to true and the initialization of the configuration fails,
        DefaultConfigurationBuilder tries to add an empty configuration of the
        correct type to the resulting combined configuration. Before this
        change optional configurations that caused errors were never added to
        the combined configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-241">
        CompositeConfiguration.clearProperty() now generates the correct
        update events.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-242">
        The configuration returned by HierarchicalConfiguration.subset()
        performed variable interpolation only in the keys that belong to the
        subset. Now the parent configuration is searched, too, to resolve the
        value of the referenced property. This is consistent with the way
        SubnodeConfiguration works.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-234">
        DefaultConfigurationBuilder now internally uses the standard expression
        engine for hierarchical configurations. So the dependency to Commons
        JXPath is no more needed when this class is used. Note that this change
        has some impact on existing code that manually sets properties before
        the combined configuration is created; this code must now be adapted to
        the changed syntax of property keys.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-236">
        HierarchicalConfiguration and some of its sub classes now define a
        copy constructor.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-197" due-to="Trevor Charles Miller">
        A new configuration class for windows ini files was added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-229">
        For file-based configurations loaded by ConfigurationFactory the load()
        method was called before all of the properties specified by attributes
        of the XML element have been initialized. Now load() is called after
        property initialization.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-235">
        Interpolation of non string values did not work when SubsetConfiguration
        was involved. This has now been fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-227">
        The compatibility of ConfigurationDynaBean with other configuration types
        than those that inherit from BaseConfiguration was improved.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-233" due-to="Rainer Jung">
        The getList() method of CompositeConfiguration does now fully support
        variable interpolation. So it is possible to refer to a variable in
        one (sub) configuration that is defined in another configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-230">
        XPathExpressionEngine used to create wrong keys for attribute nodes.
        This caused some operations on XMLConfiguration to fail when such an
        expression engine was set (e.g. reloading). Now correct keys for
        attributes are constructed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-228">
        Some of the methods of file-based hierarchical configurations (e.g.
        subset() or configurationAt()) did not take an eventually set reloading
        strategy into account. This is now fixed by overriding the internal
        fetchNodeList() method in AbstractHierarchicalFileConfiguration and
        letting it always check for a reload.
      </action>
    </release>

    <release version="1.3" date="2006-09-24">
    </release>

    <release version="1.3-rc2" date="2006-09-03">
      <action dev="oheger" type="update" issue="CONFIGURATION-223" due-to="Gabriele Garuglieri">
        AbstractFileConfiguration now overrides addProperty() and setProperty()
        instead of addPropertyDirect() to implement the auto save feature.
        This was necessary to properly integrate PropertiesConfigurationLayout.
        It has also the advantage that an auto save is triggered only once if
        multi-valued properties are involved (before a save operation was
        performed for each property value).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-222" due-to="Gabriele Garuglieri">
        The new PropertiesConfigurationLayout class broke the save() operation
        of PropertiesConfiguration when an instance was newly created and
        populated in memory. This is fixed now by ensuring that a layout object
        is immediately created and registered as event listener at the
        configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-221" due-to="Rainer Jung">
        ConfigurationFactory now supports variables in its configuration
        definition files. These variables are resolved using system properties
        and have the typical ${} syntax.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-216" due-to="Gabriele Garuglieri">
        There were still some problems with resolving relative paths when
        configuration files are loaded from classpath. This fix addresses these
        issues.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-220">
        DataConfiguration.getDateArray() used to ignore the format argument.
        This was fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-219">
        PropertiesConfiguration now defines its own clone() method to handle
        the associated PropertiesConfigurationLayout object correctly.
      </action>
    </release>

    <release version="1.3-rc1" date="2006-07-30">
      <action dev="oheger" type="update" issue="CONFIGURATION-217">
        The dependency to servletapi was updated from version 2.3 to version
        2.4, but version 2.3 will still work.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-104">
        A new class PropertiesConfigurationLayout was introduced whose task is
        to preserve the structure (e.g. comments, blanc lines) of a file
        loaded by PropertiesConfiguration. Each PropertiesConfiguration
        object is now associated with such a layout object. A saved properties
        file will look very similar to its original.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-145">
        clone() methods have been added to BaseConfiguration, AbstractFileConfiguration,
        MapConfiguration, CompositeConfiguration, and CombinedConfiguration.
        So the most important Configuration implementations now support
        cloning. To ConfigurationUtils an utility method cloneConfiguration()
        was added that allows to conveniently clone a configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-216">
        If a configuration file was to be loaded from classpath, the
        constructor of AbstractFileConfiguration dropped the file's path. The
        path is now taken into account.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-214">
        The getter methods for numeric data types in AbstractConfiguration now
        support conversions between different Number types, e.g. you can now
        call getLong(key) when key points to an Integer value.
      </action>
      <action dev="oheger" type="add">
        The new class DefaultConfigurationBuilder was added as an alternative to
        ConfigurationFactory. It provides some more features and creates a
        CombinedConfiguration object
      </action>
      <action dev="oheger" type="add">
        The new class CombinedConfiguration was added as a hierarchical
        alternative to CompositeConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-143">
        Support for low-level configuration events was added to all classes
        derived from AbstractConfiguration. The major part of this is handled
        by the new super class EventSource of AbstractConfiguration.
      </action>
      <action dev="oheger" type="add">
        A new method convertToHierarchical() was added to ConfigurationUtils,
        which is able to convert an arbitrary configuration object into a
        hierarchical configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-63">
        Loading of file-based configurations no longer throws a NullPointerException
        in setups where the thread context class loader is not set.
      </action>
      <action dev="oheger" type="update">
        The dependency to dom4j was removed; it was only used by two test classes,
        which have been re-written.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-100">
        XMLConfiguration used to drop the DOCTYPE declaration when saving the
        configuration. It is now able to extract the DTD's public and system ID
        and write them back (more complex DOCTYPE declarations are still not supported).
        With the new methods setSystemID() and setPublicID(), the DOCTYPE
        declaration can be configured.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-178">
        Added two new constructors in CompositeConfiguration accepting a
        collection of configurations as a parameter.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-186">
        (Basic) Support for declaring beans in configuration files was added.
        Some new classes in the beanutils package allow to create instances from
        these declarations.
      </action>
      <action dev="oheger" type="update">
        The implementation of the interpolation features have been extracted out
        off AbstractConfiguration and moved to PropertyConverter. The
        interpolateHelper() method of AbstractConfiguration is now deprectated
        and will not be called any more during interpolation.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-182">
        A new method configurationsAt() was added to HierarchicalConfiguration
        that provides a convenient way of iterating over complex list-like
        structures without the need of manually constructing configuration keys
        with indices.
      </action>
      <action dev="oheger" type="add">
        A new class SubnodeConfiguration was introduced that wraps a configuration
        node of a HierarchicalConfiguration. All operations performed on this
        configuration use this wrapped node as root. The new configurationAt()
        method of HierarchicalConfiguration returns such a SubnodeConfiguration
        for a specified sub node.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-173">
        With XPathExpressionEngine an expression engine for hierarchical
        configurations is now available that can evaluate XPATH expressions in
        property keys. This expression engine implementation is based on
        Commons JXPath, which is now declared as a new dependency (but at
        runtime it is only needed if the XPathExpressionEngine class is used).
      </action>
      <action dev="oheger" type="add">
        The code for interpreting property keys was refactored out off
        HierarchicalConfiguration. Instead this class now supports pluggable
        expression engines (using the setExpressionEngine() method). So it is
        possible to plug in different expression languages. A default expression
        engine is provided that understands the native expression language used
        by hierarchical configurations in older versions. During the process of
        this refactoring some methods of HierarchicalConfiguration have been
        deprecated; they will not be called any more when searching or adding
        properties. These are the following: createAddPath(), fetchAddNode(),
        findLastPathNode(), findPropertyNodes().
      </action>
      <action dev="oheger" type="update">
        A larger refactoring was performed on the inner Node class of
        HierarchicalConfiguration: A ConfigurationNode interface was extracted
        for which a default implementation (DefaultConfigurationNode) is
        provided. HierarchicalConfiguration.Node now extends this default
        implementation. The new ConfigurationNode interface defines some more
        methods than the Node class did originally for conveniently dealing with
        sub nodes and attributes. HierarchicalConfiguration now uses the new
        type ConfigurationNode whereever possible. Some methods dealing with
        Node objects have been deprecated and replaced by versions operating on
        ConfigurationNode objects instead.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-155" due-to="Jorge Ferrer">
        All configuration classes derived from AbstractConfiguration now allow
        to set an instance specific list delimiter. This can be done through
        the new method setListDelimiter(). As before it is possible to define
        a default list delimiter, which will be used if no instance specific
        delimiter is set. This can be done using the new setDefaultListDelimiter()
        method (the methods get/setDelimiter() have been deprecated). With the
        new setDelimiterParsingDisabled() method parsing of lists can be
        disabled at all.
      </action>
    </release>

    <release version="1.2" date="2005-12-17">
    </release>

    <release version="1.2-rc3" date="2005-12-07">
      <action dev="oheger" type="update">
        Commons Configuration now declares a dependency to Xalan. As with
        Xerces this dependency is only needed for JDK 1.3. It was introduced
        in a process of making Configuration buildable on a JDK 1.3. Documentation
        about the build process was also added.
      </action>
      <action dev="oheger" type="update">
        The dependency to Commons Beanutils Collections was unnecessary and
        thus removed.
      </action>
      <action dev="oheger" type="update">
        Commons Configuration now depends on Commons Digester 1.6 instead of 1.5.
        (This was done only to pick up the latest available release of digester.)
      </action>
    </release>

    <release version="1.2-rc2" date="2005-11-23">
      <action dev="oheger" type="update" issue="CONFIGURATION-2">
        ConfigurationDynaBean now implements the java.util.Map interface (as
        was stated in the javadocs). This was done by deriving the class from
        ConfigurationMap.
      </action>
    </release>

    <release version="1.2-rc1" date="2005-11-11">
      <action dev="oheger" type="update" issue="CONFIGURATION-33">
        The reload() method in AbstractFileConfiguration was updated to prevent
        reentrant invocation, which may be caused by some methods when they
        are called during a reloading operation.
      </action>
      <action dev="ebourg, oheger" type="update">
        AbstractHierarchicalFileConfiguration, a new base class for file based
        hierarchical configurations, was introduced. XMLConfiguration now
        extends this class.
      </action>
      <action dev="oheger" type="update" due-to="Kay Doebl" issue="CONFIGURATION-41">
        XMLConfiguration now prints the used encoding in the xml declaration of
        generated files. In earlier versions always the default encoding was
        written. PropertiesConfiguration now always uses the platform specific
        line separator when saving files.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-8">
        PropertiesConfiguration now translates properly the escaped unicode
        characters (like \u1234) used in the property keys. This complies with
        the specification of java.util.Properties.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-123">
        ConfigurationConverter.getProperties() now uses the delimiter of the
        specified configuration to convert the list properties into strings.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-123">
        The interpolation of variables (${foo}) is now performed in all property
        getters of AbstractConfiguration and DataConfiguration. As a side effect
        the Properties object returned by ConfigurationConverter.getProperties()
        contains only interpolated values.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-35">
        PropertiesConfiguration now uses the ISO-8859-1 encoding by default
        instead of the system encoding to comply with the specification of
        java.util.Properties.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-44">
        JNDIConfiguration no longer logs an error when attempting to get
        a property that doesn't exist in the configuration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-99">
        Attempting to load a configuration from a directory instead of a file
        will now throw a ConfigurationException.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-28">
        If a multi-valued property was involved in an interpolation operation,
        AbstractConfiguration created a string representation of the list of all
        values. This was changed to only use the first value, which makes more
        sense in this context and is consistent with other getters for single
        valued properties.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-83">
        If an include file with a relative path cannot be found in the base
        path, PropertiesConfiguration now also tries to resolve it based on its
        own location.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-117" due-to="Steve Bate">
        Fixed MapConfiguration to store the list of values added under a same
        key instead of the last value added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-80">
        Fixed a bug in the handling of relative file names in ConfigurationFactory:
        In most cases relative file names were not resolved relative to the
        location of the configuration definition file as stated in the documentation.
        This behavior was now changed to always be in sync with the documentation.
        This may have an impact on existing code which uses workarounds for
        the erroneous resolving mechanism.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-6">
        Empty elements or elements whose content consists only of comments or
        whitespace are now taken into account by XMLConfiguration. They are
        added to the configuration; their value is an empty string.
      </action>
      <action dev="oheger" type="add">
        XMLConfiguration now sets a valid system id in the InputSource used for
        loading files. This enables XML parsers to correctly resolve relative
        files, e.g. DTDs.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-74">
        getKeys() in HierarchicalConfiguration now returns the keys in the same order the properties were inserted.
      </action>
      <action dev="ebourg" type="update">
        Commons Configuration now depends on Commons Collections 3.1 instead of 3.0
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-195">
        New configurations implementing the "property list" format used in
        NeXT/OpenStep and its XML variant used in Mac OS X.
        (PropertyListConfiguration and XMLPropertyListConfiguration)
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-97">
        Resolved some issues with XMLConfiguration and properties containing
        the delimiter character. These properties are now correctly treated,
        escaping the delimiter will work, too.
      </action>
      <action dev="ebourg" type="add">
        Added support for XMLPropertiesConfiguration in ConfigurationFactory.
        A &lt;properties> element will generate a XMLPropertiesConfiguration
        if the filename ends with ".xml".
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-184">
        PropertiesConfiguration now supports escaped key/value separators in the keys
        (i.e foo\:key = bar).
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-166">
        PropertiesConfiguration now supports all key/value separators supported by java.util.Properties
        ('=', ':' and white space characters).
      </action>
      <action dev="ebourg" type="update">
        Commons Configuration now depends on Commons Lang 2.1 instead of 2.0
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-207">
        Comment lines for PropertiesConfiguration can start with the '!' char (compatibility with java.util.Properties).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-84">
        Because ConfigurationUtils.copy() does not fully support hierarchical
        configurations a clone() method was added to HierarchicalConfiguration
        that can be used instead.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-206">
        XMLConfiguration now provides some support for validating XML
        documents. With the setValidating() method DTD validation can be
        enabled. It is also possible to set a custom DocumentBuilder allowing
        a caller to perform enhanced configuration of the XML loading process.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-121">
        AbstractFileConfiguration now always sets a valid base path if the
        configuration file could be located. This allows PropertiesConfiguration
        to resolve include files even when loaded from class path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-85">
        Updated XMLConfiguration to correctly deal with properties containing
        dots in their names. Such properties could not be accessed before.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-9">
        PropertiesConfiguration's handling of backslash characters at the end
        of line was incorrect when there was an even number of trailing
        backslashes. This is now fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-130">
        Fixed a problem related to file based configurations that are loaded
        from a URL which is application/x-www-form-urlencoded: the save() method
        would store such files at a wrong location.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-50">
        Updated FileChangedReloadingStrategy to use the file based configuration's
        source URL to find the file to watch. Before that it was possible that
        the strategy checked the wrong file. For configuration files loaded
        from a jar FileChangedReloadingStrategy now checks the jar file itself
        for changes. Finally a bug was fixed which caused the strategy to
        check the watched file's last change date on every invocation of its
        reloadingRequired() method ignoring its refresh delay. Thanks to Jorge
        Ferrer.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-62">
        Fixed a bug in the collaboration between XMLConfiguration and its
        reloading strategy: The configuration did not check its reloading
        strategy, so no reload was performed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-119">
        Disabled auto save mode during PropertiesConfiguration.load(). Prior
        it was possible that the properties file to be loaded was immideately
        overwritten.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-89">
        Under certain circumstances it was possible that a reloading strategy
        set for PropertiesConfiguration interferred with the save() method causing
        the configuration file to be erased. This has now been fixed.
      </action>
      <action dev="oheger" type="update" due-to="Jamie M. Guillemette" issue="CONFIGURATION-94">
        AbstractFileConfiguration now stores the URL of the config file in the
        load() methods. This URL is reused by the save() method to ensure that
        the same file is written.
      </action>
      <action dev="ebourg" type="update" due-to="Alistair Young">
        XMLPropertiesConfiguration no longer depends on Digester to parse the
        configuration file, it's now implemented with a pure SAX parser.
      </action>
      <action dev="oheger" type="update" due-to="Mi Zhang" issue="CONFIGURATION-49">
        Fixed a bug which causes XMLConfiguration.save to lose attribute values
        under some circumstances. The clear() method now also ensures that the
        associated DOM document is always cleared.
      </action>
      <action dev="ebourg" type="update" due-to="Kunihara Tetsuya" issue="CONFIGURATION-13">
        XMLConfiguration now parse the configuration using the encoding
        declared in the XML header instead of the OS default encoding.
      </action>
      <action dev="ebourg" type="update" due-to="Zsolt Koppany">
        XMLConfiguration now uses the delimiter set by setDelimiter(char).
      </action>
    </release>

    <release version="1.1" date="2005-04-02">
      <action dev="ebourg" type="update" issue="CONFIGURATION-134">
        Fixed a ConcurrentModificationException thrown when calling clear()
        on a SubsetConfiguration applied to a BaseConfiguration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-81">
        The resolveContainerStore() method in AbstractConfiguration now works
        properly with arrays of objects and arrays of primitives. This means
        it is possible to store an array of value in the configuration and
        retrieve the first element with the getString(), getInt()... methods.
      </action>
    </release>

    <release version="1.1-rc2" date="2005-03-06">
      <action dev="oheger" type="update" issue="CONFIGURATION-118">
        Updated documentation for FileConfiguration's load() methods. Fixed a
        problem in XMLConfiguration with the output of the save() method when
        multiple files were loaded.
      </action>
      <action dev="ebourg" type="update">
        Fixed a bug in FileChangedReloadingStrategy preventing the detection
        of a file change in some cases.
      </action>
      <action dev="ebourg" type="update">
        Changed getXXXArray() and getXXXList() in DataConfiguration to return
        an empty array/list for empty values.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-58">
        Fixed getLongArray(), getFloatArray() and getDoubleArray() in DataConfiguration,
        the values were cast into integers.
      </action>
    </release>

    <release version="1.1-rc1" date="2005-02-13">
      <action dev="oheger" type="add" issue="CONFIGURATION-88">
        ConfigurationFactory now always configures digester to use the context
        classloader. This avoids problems in application server environments,
        which use their own version of digester. Thanks to Mike Colbert for the
        patch!
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-148">
        Added a new configuration, XMLPropertiesConfiguration, supporting the
        new XML format for java.util.Properties introduced in Java 1.5.
        A 1.5 runtime is not required to use this class.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-190">
        Added a comment header to PropertiesConfiguration. The header is not
        parsed when the file is loaded yet.
      </action>
      <action dev="ebourg" type="add">
        Added the setEncoding(String) and the getEncoding() methods to the
        FileConfiguration interface to control the encoding of the
        configuration file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-210">
        Access to the top level element of the XML document is now provided. For
        newly created configurations this element can be changed before the
        document is written.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-168">
        Merged the two XML related configuration classes into one new class
        XMLConfiguration. This new class should provide the best of its
        ancestors.
      </action>
      <action dev="ebourg" type="update">
        Replaced the PropertyTokenizer inner class in AbstractConfiguration
        with the split method in PropertyConverter. Also moved the method
        building an iterator on the elements of a composite value in
        PropertyConverter as toIterator().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-15">
        Some cleanup of the handling of the base path in file based configurations.
        The base path is now always taken into account.
      </action>
      <action dev="ebourg" type="fix">
        Calling getProperties on a JNDIConfiguration no longer throws an
        UnsupportedOperationException.
      </action>
      <action dev="ebourg" type="remove">
        Removed the getPropertyDirect method from AbstractConfiguration,
        concrete configurations now implement directly the getProperty method
        from the Configuration interface.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-187">
        Added implementation of a save() method for HierarchicalXMLConfiguration.
      </action>
      <action dev="ebourg" type="update">
        Constructing a file based configuration with a File no longer throws
        an exception when the file doesn't exist.
      </action>
      <action dev="ebourg" type="add">
        Saving a configuration now creates the path to the file if it doesn't exist.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-45">
        AbstractFileConfiguration.save(File) no longer fails silently when
        an error occurs, a ConfigurationException is thrown instead.
      </action>
      <action dev="ebourg" type="fix">
        ConfigurationUtils.locate() now checks if the URL based resources exist.
        This fixes a bug preventing configuration files from being found if
        the configuration descriptor is in a JAR file (reported by Grant Ingersoll).
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-96">
        Fixed NPE that were caused in the constructors of file based
        configurations if an invalid file name was specified.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-162">
        Added support for optional configuration sources in definition files for
        ConfigurationFactory. A new optional attribute allows to specify whether a
        configuration source is mandatory or optional.
      </action>
      <action dev="ebourg" type="fix">
        JNDIConfiguration.getKeys() now returns an empty iterator instead of
        throwing a ConfigurationRuntimeException when a NamingException occurs.
        The NamingExceptions are now logged.
      </action>
      <action dev="ebourg" type="fix">
        DatabaseConfiguration.isEmpty() now returns true if an SQLException occurs.
      </action>
      <action dev="ebourg" type="add">
        Added two methods copy(Configuration, Configuration) and
        append(Configuration, Configuration) in ConfigurationUtils to copy
        properties between configurations.
      </action>
      <action dev="ebourg" type="update">
        Moved the constructors implementations from PropertiesConfiguration and
        XMLConfiguration to AbstractFileConfiguration.
      </action>
      <action dev="epugh" type="remove">
        Remove deprecated getVector() implementations.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-147">
        File based configurations can now be automatically reloaded when the
        underlying file is modified.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-156">
        Added a clear() method to the Configuration interface to remove
        all properties.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-208">
        Added a SystemConfiguration wrapping the system properties.
        ConfigurationFactory recognizes the corresponding &lt;system/&gt;
        element.
      </action>
      <action dev="ebourg" type="add">
        Added a MapConfiguration to turn any Map into a Configuration. The
        getConfiguration() methods in ConfigurationConverter now use
        MapConfiguration, as a result the Configuration returned is always
        synchronized with the underlying Properties or ExtendedProperties,
        changes made to the Configuration are available in the Properties,
        and reciprocally.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-146">
        The "autoSave" feature of XMLConfiguration has been generalized
        to all file based configurations.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-191">
        Numeric properties can now be specified in hexadecimal format,
        for example "number = 0xC5F0".
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-36">
        Fixed HierarchicalConfiguration.getKeys(String), it returned an empty
        iterator if the prefix string contained indices.
      </action>
      <action dev="ebourg" type="add">
        Added a DataConfiguration decorator providing getters for all useful
        types found in a configuration (URL, Locale, Date, Calendar, Color,
        lists and arrays)
      </action>
      <action dev="ebourg" type="add">
        Added 5 new configurations to be used in a web environment:
        AppletConfiguration, ServletConfiguration, ServletContextConfiguration,
        ServletRequestConfiguration, ServletFilterConfiguration.
      </action>
    </release>

    <release version="1.0" date="2004-10-11" description="First official release">
      <action dev="ebourg" type="fix" issue="CONFIGURATION-66">
        The getStringArray() method in CompositeConfiguration now interpolates
        the strings.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-23">
        SubsetConfiguration now shares the "throwExceptionOnMissing" property
        with its parent.
      </action>
      <action dev="ebourg" type="fix">
        Removed "file:" at the beginning of the base path when calling
        setFile() on a FileConfiguration. This prevented auto saving an
        XMLConfiguration loaded from a File (issue reported by Mark Roth).
      </action>
      <action dev="ebourg" type="update">
        All NamingEnumerations in JNDIConfiguraiton are now properly closed (Suggested
        by Eric Jung).
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-90">
        Properties added to an XMLConfiguration are no longer duplicated in the
        resulting XML file.
      </action>
    </release>

    <release version="1.0-rc2" date="2004-09-24">
      <action dev="ebourg" type="update">
        Unified the mechanisms for loading and saving file based configurations.
        PropertiesConfiguration, XMLConfiguration and HierarchicalXMLConfiguration
        now implement the same FileConfiguration interface. BasePathLoader,
        BasePathConfiguration, ClassPropertiesConfiguration and
        BasePropertiesConfiguration have been removed.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-22">
        Replaced the calls to Boolean.booleanValue(boolean) in
        AbstractConfiguration and ConfigurationDynaBean to be Java 1.3
        compatible.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-112">
        Changing the prefix of a JNDIConfiguration will now reset the base context used.
      </action>
      <action dev="ebourg" type="add" due-to="Eric Jung">
        The context used by JNDIConfiguration can be specified in its
        constructor or through the setContext() method. The context can be
        accessed with the getContext() method which is now public.
      </action>
      <action dev="henning" type="add">
        Make the behaviour on missing properties for the get methods that
        return objects configurable. A property throwExceptionOnMissing
        can be set and then the getters throw an NoSuchElementException.
        The old default behaviour of returning a null value has
        been restored.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-151">
        Allow configurations extending AbstractConfiguration to change the
        delimiter used from "," to something else.
      </action>
      <action dev="epugh" type="fix">
        PropertiesConfiguration.save() method has issues with preserving the filename
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-132" due-to="Mark Woodman">
        Test cases for HierarchicalConfigurationXMLReader stores comments as text nodes.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-183" due-to="Ricardo Gladwell">
        Clarify for ConfigurationDynaBean that the get method should throw an
        illegalArgumentException if there is no property specified.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-25">
        Fixed a ClassCastException when adding a non String property to an XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-138" due-to="Oliver Heger">
        Fixed the handling of attribute properties by HierarchicalConfigurationConverter.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-125">
        Fixed a ClassCastException thrown on adding a non string property
        in a DatabaseConfiguration.
      </action>
      <action dev="henning" type="add">
        Bring back the getVector() methods in the Configuration interface.
        These methods are needed for &quot;drop-on&quot; replacement of the
        various pre-1.0 commons-configuration snapshots and are already
        deprecated. These methods will be removed for 1.1.
      </action>
    </release>

    <release version="1.0-rc1" date="2004-08-14">
      <action dev="epugh" type="add" issue="CONFIGURATION-132" due-to="Oliver Heger">
        HierarchicalConfigurationXMLReader stores comments as text nodes.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-122" due-to="Ricardo Gladwell">
        project.xml contains bad dependencies.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-64" due-to="Brent Worden">
        clearXmlProperty doesn't remove list properties completely.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-183" due-to="Ricardo Gladwell">
        new ConfigurationDynaBean.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-185" due-to="Ricardo Gladwell">
        new ConfigurationMap and ConfigurationSet.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-91" due-to="Ricardo Gladwell">
        Problem adding property XMLConfiguration.
      </action>
      <action dev="epugh" type="remove">
        ConfigurationXMLDocument removed until post 1.0.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-18">
        DatabaseConfiguration doesn't support List properties.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-137">
        Fixed a bug related to XMLConfiguration. Can't add a new property as an
        attribute in XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-116">
        Fixed a bug related to XMLConfiguration. XMLConfiguration doesn't
        support attribute names with a dot.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-4">
        Fixed a bug related to XMLConfiguration. XMLConfiguration doesn't ignore
        comments.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-32">
        Fixed a bug related to XMLConfiguration. XMLConfiguration.save() doesn't
        escape reserved characters.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-114">
        Added save methods in XMLConfiguration similar to PropertiesConfiguration
        to save the configuration to another file.
      </action>
      <action dev="ebourg" type="update">
        Removed the DOM4J implementations in favor of the DOM ones.
        DOMConfiguration has been renamed to XMLConfiguration, and
        HierarchicalDOMConfiguration to HierarchicalXMLConfiguration. The
        elements parsed by the ConfigurationFactory have been changed
        accordingly.
      </action>
      <action dev="ebourg" type="add">
        Added a save() method to PropertiesConfiguration and save(Writer out),
        save(OutputStream out), save(OutputStream out, String encoding) to
        BasePropertiesConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-98">
        List values are now properly stored as comma separated values in the
        Properties object returned by ConfigurationConverter.getProperties()
      </action>
      <action dev="ebourg" type="update">
        Introduced a ConversionException thrown when the value of a property is
        not compatible the type requested. It replaces the ClassCastException
        and the NumberFormatException thrown previously.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-174">
        Tokens like ${ref} in a PropertyConfiguration are now properly saved.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-127">
        The getList() method of a CompositeConfiguration now returns the list
        composed of the elements in the first matching configuration and the
        additional elements found in the in memory configuration.
      </action>
      <action dev="epugh" type="fix">
        SubsetConfiguration returns a List on getList(). AbstractConfiguration
        wouldn't properly deal with a List, only with a Container for getList()!
        Thanks to jschaible for the unit test.
      </action>
      <action dev="jschaible" type="add">
        Direct support of XML via DOM. New classes DOMConfiguration and HierarchicalDOMConfiguration.
      </action>
      <action dev="jschaible" type="update">
        Update build to not include test configuration files in resulting jar.
      </action>
      <action dev="ebourg" type="update">
        Refactored JNDIConfiguration to use AbstractConfiguration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-76">
        Fixed invalid subsets by refactoring out the subset logic into a SubsetConfiguration.
      </action>
      <action dev="oheger" type="fix">
        Reapply the ConfigurationXMLDocument that went missing during migration out of sandbox.
      </action>
      <action dev="epugh" type="update">
        Apply ASL 2.0 license.  Thanks to Jeff Painter for scripting the conversion!
      </action>
      <action dev="epugh" type="add">
        Changed CompositeConfiguration to extend from AbstractConfiuration. This means that the behavior of
        CompositeConfiguration is much similar to others like PropertiesConfiguration in handling of missing
        keys, interpolation, etc.. Previously CompositeConfiguration had quite a few differences.
      </action>
      <action dev="epugh" type="update">
        Removed "defaults" from BaseConfiguration. Defaults are now done via using a CompositeConfiguration, either
        directly or via a ConfigurationFactory. if you want to save changes made to a Configuration, then you use
        a CompositeConfiguration and get back the inMemoryConfiguration that has the delta of changes. Added a
        bit of documentation on this.
      </action>
      <action dev="epugh" type="update" issue="CONFIGURATION-154">
        Enhancement: Configuration Comparator.
      </action>
      <action dev="epugh" type="update" issue="CONFIGURATION-54">
        BaseConfiguration: containsKey ignores default properties.
        I have changed it so that now the defaults are paid attention to.
      </action>
      <action dev="ebourg" type="add">
        The Configuration interface now supports BigDecimal and BigInteger numbers.
      </action>
      <action dev="epugh" type="add">
        ConfigurationException is now thrown by public methods instead of Exception or
        IOException or whatnot.
      </action>
      <action dev="ebourg" type="add">
        For configuration based on properties files, allow characters like \n etc
        to be escaped and unescaped.
      </action>
      <action dev="ebourg" type="add">
        New DatabaseConfiguration that uses a database to store the properties.
        It supports 2 table structures: one table per configuration (2 colums
        key/value), one table for multiple configurations (2 columns key/value +
        1 column for the name of the configuration).
      </action>
      <action dev="oheger" type="add">
        ConfigurationFactory now supports the hierarchicalDom4j element in configuration
        definition file
      </action>
      <action dev="ebourg" type="update">
        Change all Vector objects to List objects.
      </action>
      <action dev="oheger" type="add">
        ConfigurationFactory now supports two types of properties files, additional and
        override.  Additional properties add each other together.  Override override each
        other.  This allows you to have a single property that is either aggregated from a
        number of sources, or have a property that is overridden according to a specific
        order of sources.
      </action>
      <action dev="oheger" type="update">
        AbstractConfiguration addProperty now delegates to an abstract addPropertyDirect
        implemented by BaseConfiguration.
      </action>
      <action dev="kshaposhnikov" type="update">
        Changed getString() method to throw a NoSuchElementException instead of "" if the
        configuration property doesn't exist.
      </action>
      <action dev="kshaposhnikov" type="add">
        Added AbstractConfiguration to make it easier to create subclasses by only
        having to implement the methods required.
      </action>
      <action dev="bdunbar" type="fix">
        ClassPropertiesConfiguration Additions:
        Use the classloader of class that is provided by the constructor.
        Add a constructor that indicates whether to use relative or absolute.
        Change getPropertyStream to utilize the relative or absolute flag.
        Add a test case that checks that absolute paths work.
      </action>
      <action dev="epugh" type="fix">
        JNDIConfiguration.getKeys() Addition:
        The JNDIConfiguration.getKeys() method was returning an unsupported
        operation error.  However, this is an important method to have
        supported.
      </action>
      <action dev="epugh" type="fix">
        CompositeConfiguration.getKeys() Fix
        The CompositeConfiguration.getKeys() method was returning an
        unordered list of configuration values.  However, many apps
        expect the order that keys are returned to be the order they
        are added into the properties file.
      </action>
    </release>
  </body>
</document>
