<?xml version="1.0"?>
<document>
  <properties>
    <title>Changes</title>
    <author email="epugh@upstate.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="1.0" date="IN CVS">
      <action dev="ebourg" type="fix" issue="29616">
        The getStringArray() method in CompositeConfiguration now interpotales
        the strings.
      </action>
      <action dev="ebourg" type="fix" issue="31540">
        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="30799">
        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="31346">
        Replaced the calls to Boolean.booleanValue(boolean) in
        AbstractConfiguration and ConfigurationDynaBean to be Java 1.3
        compatible.
      </action>
      <action dev="ebourg" type="fix" issue="31345">
        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 <code>throwExceptionOnMissing</code>
        can be set and then the getters throw an <code>NoSuchElementException</code>.
        The old default behaviour of returning a <code>null</code> value has
        been restored.
      </action>         
      <action dev="epugh" type="add" issue="29714">
        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="30597" due-to="Mark Woodman">
        Test cases for HierarchicalConfigurationXMLReader stores comments as text nodes
      </action>         
      <action dev="epugh" type="fix" issue="30545" 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="30839">
        Fixed a ClassCastException when adding a non String property to an XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="30655" due-to="Oliver Heger">
        Fixed the handling of attribute properties by HierarchicalConfigurationConverter.
      </action>
      <action dev="ebourg" type="fix" issue="30676">
        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="30597" due-to="Oliver Heger">
        HierarchicalConfigurationXMLReader stores comments as text nodes
      </action>
      <action dev="epugh" type="add" issue="30648" due-to="Ricardo Gladwell">
        project.xml contains bad dependencies
      </action>
      <action dev="epugh" type="add" issue="30234" due-to="Brent Worden">
        clearXmlProperty doesn't remove list properties completely
      </action>
      <action dev="epugh" type="add" issue="30545" due-to="Ricardo Gladwell">
        new ConfigurationDynaBean
      </action>
      <action dev="epugh" type="add" issue="29611" due-to="Ricardo Gladwell">
        new ConfigurationMap and ConfigurationSet
      </action>
      <action dev="epugh" type="fix" issue="30598" 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="29734">
        DatabaseConfiguration doesn't support List properties.
      </action>
      <action dev="ebourg" type="fix">
        Fixed several bugs related to XMLConfiguration:
        <ul>
          <li>30074 - Can't add a new property as an attribute in XMLConfiguration</li>
          <li>30205 - XMLConfiguration doesn't support attribute names with a dot</li>
          <li>30209 - XMLConfiguration doesn't ignore comments</li>
          <li>30212 - XMLConfiguration.save() doesn't escape reserved characters</li>
        </ul>
      </action>
      <action dev="ebourg" type="add">
        Added save methods in XMLConfiguration similar to PropertiesConfiguration
        to save the configuration to another file (bug 29721).
      </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">
        List values are now properly stored as comma separated values in the
        Properties object returned by ConfigurationConverter.getProperties()
        (Bug 29607)
      </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">
        Tokens like ${ref} in a PropertyConfiguration are now properly saved
        (Bug 29366).
      </action>
      <action dev="ebourg" type="fix">
        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 (Bug 28660).
      </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">
        Fixed bug 27427 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">
        Bugzilla 16504 Enhancement: Configuration Comparator
      </action>
      <action dev="epugh" type="update">
        Bugzilla 26694 (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 :
        <ul>
          <li>one table per configuration (2 colums key/value)</li>
          <li>one table for multiple configurations (2 columns key/value + 1 column
              for the name of the configuration)</li>
        </ul>
      </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">
        <strong>ClassPropertiesConfiguration Additions</strong>
        <ul>
          <li>Use the classloader of class that is provided by the constructor.</li>
          <li>Add a constructor that indicates whether to use relative or absolute.</li>
          <li>Change getPropertyStream to utilize the relative or absolute flag.</li>
          <li>Add a test case that checks that absolute paths work.</li>
        </ul>
      </action>
      <action dev="epugh" type="fix">
        <strong>JNDIConfiguration.getKeys() Addition</strong>
        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">
        <strong>CompositeConfiguration.getKeys() Fix</strong>
        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>
