<?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.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the 
release process easy :-).

2.  Do a Jira search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits.  Set the project.properties' maven.changelog.range 
property to the number of days since the last release.


The <action> type attribute can be add,update,fix,remove.
-->

<document>
  <properties>
    <title>Release Notes</title>
  </properties>
  <body>

    <release version="1.8.0-BETA" date="2007-08-04" description="Converter improvements, Plugable expression Resolver and bug fixes for 1.7.0">
      <action dev="niallp" type="add" issue="BEANUTILS-259">
         Add plugable property name expression <b><i>Resolver</i></b>.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-258">
         General Converter implementation improvements:
         <ul>
           <li>New <b>AbstractConverter</b> which provides a basic structure for
               Converter implementations:</li>
               <ul>
                   <li>Provides structure for converting to and from a String
                       for the type the converter handles.</li>
                   <li>Provides a mechanism for default values.</li>
                   <li>Handles missing and invalid values in a uniform way.</li>
               </ul>
           <li>New <b>NumberConverter</b> implementation:</li>
               <ul>
                   <li>Converts both to and from <code>String</code> for numbers.</li>
                   <li>Can be configured to convert using the default format for either
                       the default Locale or a specified Locale.</li>
                   <li>Can be configured to convert using a specified 
                       <code>DecimalFormat</code> pattern, either for the default
                       Locale or a specified Locale.</li>
                   <li>Provides the basis for all the number converters in BeanUtils.</li>
               </ul>
         </ul>
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-242">
         Add new generic <b>ArrayConverter</b> implementation.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-255">
         Add new generic <b>DateTimeConverter</b> implementation.
         <ul>
             <li>Converts both to and from <code>String</code> for dates.</li>
             <li>Can be configured to convert using the default format for either
                 the default Locale or a specified Locale.</li>
             <li>Can be configured to convert using a set of 
                 <code>DateFormat</code> patterns.</li>
             <li>Provides the basis for all the date converters in BeanUtils.</li>
             <li>Handles conversion for (and between) <code>java.util.Date</code>,
                 <code>java.util.Calendar</code>, <code>java.sql.Date</code>,
                 <code>java.sql.Time</code> and <code>java.sql.Timestamp</code></li>
         </ul>
      </action>
      <action dev="vgritsenko" type="update" issue="BEANUTILS-239" due-to="Rafael Afonso">
         Better implementation of SqlDateConverter. Modified SqlDateConverter,
         SqlTimeConverter and SqlTimestampConverter to accept java.util.Date
         and Calendar object instances. Added tests.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-286">
         New Facade converter implementation - hide non-Converter public APIs.
      </action>
      <action dev="skitching" type="update" issue="BEANUTILS-229">
         Add "t/f" to BooleanConverter.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-43" due-to="Firepica and Thomas Jacob">
         Support Mapped property inside a mapped property.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-113" due-to="Firepica and Ludwig Wensauer">
         Support Indexed property inside a mapped property.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-247" due-to="Christian Poitras, Thomas Jacob and scott sadlo">
         Support Arrays with multiple dimension.
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-207" due-to="Erik Meade">
         Include bean class in the message of PropertyUtilsBean exceptions.
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-224" due-to="Ralf Hauser">
         Provide better error message for "argument type mismatch".
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-30" due-to="Barry Kaplan">
         Improved messages for unknown properties.
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-193" due-to="Nestor Boscan">
         MethodUtils.invoke for static methods.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-266" due-to="Brian Ewins and Commons HttpClient">
         Log or throw exception in PropertyUtilsBean.
         Added mechanism to initialize the "cause" on an Exception using reflection for JDK 1.4+
         (copied from Commons HttpClient).
      </action>
      <action dev="niallp" type="add" due-to="Vic Cekvenich">
         Add lazyDynaList.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-185" due-to="Gabriel Belingueres">
         Provide a Map decorator for a DynaBean (enables DynaBean to be used with other teechnologies such as JSTL).
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-233" due-to="Russell">
         Implement equals() and hashCode() methods for DynaProperty. 
      </action>


      <action dev="niallp" type="fix" issue="BEANUTILS-243" due-to="Henri Yandell">
         BeanUtils's tests fail to compile under JDK 1.6
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-49" due-to="Jesper Richter-Reichhelm">
         Lock in BeanUtilsBean.getInstance(
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-157" due-to="Thorbjorn Ravn Andersen">
         Beanutils's describe() method cannot determine reader methods for anonymous class.
      </action>
      <action dev="rdonkin" type="fix" issue="BEANUTILS-158">
         Added warning about describe behaviour to the javadocs.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-249" due-to="Brad">
         BeanUtilsBean's setProperty() does not convert objects using custom converters properly.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-17">
         Fix javadoc - IllegalArgumentException in BeanUtils.copyProperties
         when property types don't match.
        <dueto name="Matthew Sgarlata"/>
        <dueto name="Corey Scott"/>
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-68" due-to="Dmitry Platonoff">
         Writing to a mapped property requires a setter for a map, but never uses it.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-110" due-to="Etienne Bernard">
         BeanUtilsBean.getArrayProperty() does not use ConvertUtils.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-6" due-to="Sam Ruby">
         MappedPropertyDescriptor - replace copied code.
      </action>
      <action dev="skitching" type="fix">
         MappedPropertyDescriptor: Add comments re: * use of static variable safe in shared
         classloader * memory leak possible on webapp undeploy.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-69" due-to="Chris Audley">
         MappedPropertyDescriptor doesn't recognize boolean property accessor.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-163">
         Add test for MappedPropertyDescriptor with different types on get/set methods.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-140" due-to="Marco La Porta">
         LocaleBeanUtils setProperty does not work on nested property.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-87" due-to="YOKOTA Takehiko">
         Package scope implementation of a public interface for mapped property fails
         (fixed by changes to MappedPropertyDescriptor associated with BEANUTILS-6)
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-33" due-to="Eoin Curran">
         PropertyUtils incosistency - can't use "dot" in mapped properties for setProperty
         or getPropertyDescriptor (fixed by the changes for BEANUTILS-259
         Plugable Property Name Expression Resolver).
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-273" due-to="Marcelo Liberato">
         Public methods overriden in anonymous or private subclasses are not recognized by PropertyUtils.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-88" due-to="Chuck Daniels">
         PropertyUtilsBean's isReadable() / isWriteable() always return false for mapped properties.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-61" due-to="Brian Ewins">
         PropertyUtilsBean isReadable() and isWriteable() methods do not work correctly for WrapDynaBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-18" due-to="Maarten Coene">
         PropertyUtils.isReadable() and PropertyUtils.getProperty() not consistent.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-92" due-to="Will Pugh">
         PropertyUtilsBean.copyProperties does not catch NoSuchMethodException
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-256" due-to="Torsten Feig">
         PropertyUtilsBean.getIndexedProperty()'s javadoc should indicate
         IndexOutOufBoundsException can be thrown rather than just
         ArrayIndexOutOufBoundsException.
      </action>
      <action dev="skitching" type="fix" issue="BEANUTILS-162">
         Create new methods getPropertyOfMapBean and setPropertyOfMapBean that the existing
         setNestedProperty and getNestedProperty methods now call when they discover the bean
         they are accessing implements Map. This makes it much easier for users to subclass
         and customise this behaviour of PropertyUtilsBean, eg in order to restore pre-1.5 behaviour.
         This patch also causes an exception to be thrown when the propertyName passed to 
         getPropertyOfMapBean or setPropertyOfMapBean has MAPPED_DELIM or INDEXED_DELIM chars in
         it. This never worked as expected before (the whole string was treated literally as the
         propertyName), so throwing an exception here should not break any existing code. It should
         be of help to future developers who make this mistake though...
      </action>
      <action dev="skitching" type="fix">
         Ignore simple properties on <code>java.util.Map</code> objects -
         <i>Map methods are always used on a Map object</i>.
         Reverts <a href="http://issues.apache.org/jira/browse/BEANUTILS-144">BEANUTILS-144</a>.
         See <a href="http://issues.apache.org/jira/browse/BEANUTILS-162">BEANUTILS-162</a> for
         discussion.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-262">
         Correct getPropertyDescriptor() and setNestedProperty() methods to throw
         a NestedNullException rather than just IllegalArgumentException (consistent
         with the getNestedProperty() method).
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-97">
         Problems on indexed property with JDK 1.4.
      </action>
      <action dev="skitching" type="update">
         BooleanArrayConverter:
         <ul>
            <li>Use new AbstractArrayConverter constructors</li>
            <li>Convert strings to booleans by invoking a BooleanConverter rather than
                hard-wiring the conversion.</li>
         </ul> 
      </action>
      <action dev="skitching" type="update" due-to="Eric Rizzo">
         BooleanConverter:
         <ul>
            <li>Add facility for user to override the default set of true and false
                string definitions</li>
            <li>provide ability to pass special NO_DEFAULT object as the
               "defaultValue" constructor parameter.</li>
         </ul> 
      </action>
      <action dev="skitching" type="update">
         AbstractArrayConverter: provide ability to pass special NO_DEFAULT object as the
         "defaultValue" constructor parameter.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-78" due-to="Stefan Lotscher">
         DecimalLocaleConverter and subClasses never throw a ConversionException.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-44" due-to="Paul Jenkins">
         FloatLocaleConverter cannot parse negative values.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-263" due-to="Alex Albu">
         Improve ClassConverter robustness.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-271" due-to="Nico Hoogervorst">
         DateLocaleConverter does not always throw an Exception for invalid dates.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-288">
         Don't try parsing values that are already Dates/Numbers in Date/Number locale Converters.
      </action>
      <action dev="skitching" type="fix">
         WrapDynaClass: Added comment re potential memory leak, and safety when using
         shared classloader
      </action>
      <action dev="niallp" type="fix">
         Make WrapDynaBean Serializable.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-36" due-to="Jack">
         WrapDynaBeanTestCase failing with jikes/kaffe because of static List in TestBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-23" due-to="Aslak Hellesoy">
         Misleading error message in ConvertingWrapDynaBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-24" due-to="Roi Ares">
         LazyDynaBean: don't try and instantiate properties of type Object.class.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-133" due-to="Masoud Omidvar">
         LazyDynabean JavaDoc corrections.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-250">
         LazyDynaClass can create a DynaProperty with a "null" type.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-289">
         JDBCDynaClass "lowerCase" option causes problems in RowSetDynaClass and ResultSetIterator.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-142" due-to="Li Zhang">
         RowSetDynaClass fails to copy ResultSet to DynaBean with Oracle 10g JDBC driver.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-241" due-to="Chris Hyzer">
         Fix BeanComparator throws wrong exception and hides cause.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-112" due-to="Simon Kitching">
         Deprecate the public static defaultTransformers HashMap and make it unmodifiable.
      </action>

      <action dev="niallp" type="update" issue="BEANUTILS-290">
         Merge Bean-Collections back into core BeanUtils and remove Bean-Collections sub-project.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-287">
         Fixi the build to include all the tests and change the build.properties.sample so it's easier
         to use for the default maven user (ie: it looks by default in the .maven repository)
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-217" due-to="Carlos Sanchez">
         Improvements to maven build.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-54" due-to="Pascal Grange">
         Add Implementation-Vendor-Id entry to jar's manifest.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-121" due-to="Chris Tilden">
         Resolve compiler warnings: Unused imports, un-read local variables,
         field hiding, empty block, improperly used statics, uncessary semi
         colons, unnecessary casts.
      </action>
      <action dev="skitching" type="fix">
         Replace use of static Log objects with instance or local variables. It isn't safe
         to use static Log objects in code that might be deployed via a shared classloader
         as they will bind to the Log object from the context classloader in use when the
         first use happens.
      </action>
      <action dev="scolebourne" type="fix" due-to="Dimiter Dimitrov" issue="COLLECTIONS-22">
         BeanMap: Fix internal variable to not include non-existant write methods.
         - ported from Commons Collections.
      </action>
      <action dev="rdonkin" type="update" due-to="Steve Cohen">
         Change MethodUtils to make getMatchingAccessibleMethod() method selection more
         rational.
      </action>
    </release>

    <release version="1.7.0" date="2004-08-02">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.7.0/RELEASE-NOTES.txt">
         1.7.0 Release Notes</a>
      </action>
    </release>

    <release version="1.6.1" date="2003-02-18">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.6.1/RELEASE-NOTES.txt">
         1.6.1 Release Notes</a>
      </action>
    </release>

    <release version="1.6" date="2003-01-21">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.6/RELEASE-NOTES.txt">
         1.6 Release Notes</a>
      </action>
    </release>

    <release version="1.5" date="2002-10-23">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.5/RELEASE-NOTES.txt">
         1.5 Release Notes</a>
      </action>
    </release>

    <release version="1.4.1" date="2002-08-28">
      <action type="fix">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.4.1/RELEASE-NOTES.txt">
         1.4.1 Release Notes</a>
      </action>
    </release>

    <release version="1.4" date="2002-08-13">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.4/RELEASE-NOTES.txt">
         1.4 Release Notes</a>
      </action>
    </release>

    <release version="1.3" date="2002-04-29">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.3/RELEASE-NOTES.txt">
         1.3 Release Notes</a>
      </action>
    </release>

    <release version="1.2" date="2001-12-24">
      <action type="update">
         See <a href="http://commons.apache.org/beanutils/commons-beanutils-1.2/RELEASE-NOTES.txt">
         1.2 Release Notes</a>
      </action>
    </release>

    <release version="1.1" date="2001-09-22">
      <action type="update">Version 1.1</action>
    </release>

    <release version="1.0" date="2001-07-14" description="Initial Release">
      <action type="add">Initial Release</action>
    </release>
    
  </body>
</document>
