$Id: RELEASE-NOTES.txt,v 1.6 2002/08/13 04:42:07 sanders Exp $

                          Commons BeanUtils Package
                                Version 1.4
                               Release Notes


INTRODUCTION:
============

This document contains the release notes for this version of the Commons
BeanUtils package, and highlights changes since the previous version.


NEW FEATURES:
============

Initial checkin of a way to wrap DynaBean APIs around the rows in a 
java.sql.ResultSet, along with associated test cases and docco updates.
Please note that this does not support indexed or mapped properties.
See org.apache.commons.beanutils.ResultSetDynaClass and ResultSetIterator.

Added a new WrapDynaBean derivation, called ConvertingWrapDynaBean which will
perform type conversion when the set(name, value) method is called.  This is
particularly useful when using a DynaBean to wrap a bean and configuring it by
passing in Strings
  

Infrastructure Enhancements:
----------------------------

BeanUtils can now be built using Maven. 
See http://jakarta.apache.org/turbine/maven for more details.


DynaBeans Enhancements:
-----------------------

Update usage documentation to note the restrictions that are due to the fact
that the DynaBeans returned by iterator() are mapped directly to the current
row of the result set.  If you want to use the data outside the context of
what is supported, you need to copy it, so document one way to "clone" the
data with standard BasicDynaBean beans.

DynaProperty is now serializable.
  

BeanUtils Enhancements:
----------------------

Add BeanUtils.copyProperties() and associated BeanUtils.copyProperty() method,
plus associated unit tests.  BeanUtils.copyProperties() is similar to
PropertyUtils.copyProperties(), but it attempts to perform type conversions
needed to adapt to differences between the two beans.  For example, it is 
common (especially in Struts applications) to use String properties in a form 
bean that receives values from an HTTP form, even though your corresponding 
model objects have int or boolean properties of the same name.  Now, you can 
call BeanUtils.copyProperties() and have these conversions (or any other 
conversions for which you have registered a Converter with 
ConvertUtils.register()) automatically.

BeanUtils.describe() now supports DynaBeans.

'NoSuchMethod for read only properties and NullPointer when populating
primitives' patch submitted by Tomas Viberg.  
See http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102331002605035&w=2

Made BeanUtils.setProperty() public. This is a useful method for those wishing to
set a single property on a bean while still making use of the default conversion
mechanism.  




ConvertUtils Enhancements:
-------------------------

Add standard String->Class converter, based on a patch provided by
Tomas Viberg.  The only tweak I did was to make the class loading attempt
to grab from the thread context class loader first (if it exists), and then
from the class loader that loaded the ClassConverter class.

Add new standard converters (and register them) for String to primitive
array conversions (for example, String --> int[]), as well as
String --> String[].  The syntax accepted by these converters is similar
to that accepted by a Java compiler doing array initializers, with the
following adjustments:
  
  * Only literal values of the appropriate type are recognized
    (i.e. no expressions)
  
  * Leading and trailing "{" and "}" are allowed, but optional
  
  * Commas between elements are considered to be whitespace,
    so that they are optional.
  
  Thus, you can initialize a three-element integer array with values
  1, 2, and 3 with any of the following String values.
  
    "{ 1, 2, 3}"
  
    "1, 2, 3"
  
    "{ 1 2 3 }"
  
    "1 2 3"
  
  Quoted strings embedded in the initial String (delimited with either single
  or double quotes) are recognized by the rules of the java.io.StreamTokenizer
  class.  This is particularly useful in the String --> String[] converter,
  where you can initialize array elements to a String that includes a comma
  or embedded quote character.
  

MethodUtils Enhancements:
------------------------

Enhance BeanUtils.copyProperties() and PropertyUtils.copyProperties() such
that, if the "origin bean" is a Map, it will be assumed to have keys that
are simple property names and values that are the corresponding property
values.  BeanUtils.copyProperties() will additionally pass property values
through an appropriate Converter.
  
Enhance standard array Converter implementations to deal with String arrays
as the input value.  They now create an output array of the same size, and
perform the appropriate String->primitive conversion for each element.
  
Add unit tests for copyProperties() when the origin bean is a Map.
  
New test cases for calling static methods.

Improved primitive type checking, including the ability to call methods
containing primitive parameters by passing the apropriate wrapping class
(eg Integer for int). 
See: http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102822664727735&w=2
and  http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102796703724338&w=2


PropertyUtils Enhancements:
--------------------------


Support mapped keys that have periods in them, so that things like this
will work correctly: 
  PropertyUtils.getProperty("mapped_property(key.with.a.dot).blah");

Support an extension to the property expression syntax that is similar to
the way the EL in JSTL and JSP 2.0 works:  If property "a" is a Map, interpret
"a.b" the same as "a(b)".  This is similar to what the JSP/JSTL expression
does when interpreting "a.b" as "a['b']" if "a" is a Map.  

Make PropertyUtils.copyProperties() support a DynaBean as the "orig"
argument (it already worked as a "dest" argument).

PropertyUtils.describe() now supports DynaBeans.


BUG REPORTS ADDRESSED:
=====================

9868  BeanUtils.populate() throws IllegalArgumentException when setting indexed 
      property as array.
10478 Can't use . (dot) in mapped properties
10655 Add ClassConverter to standard converters
10535 DynaActionForm, BeanUtils.populate, Unknown property 'multipartRequestHandler'
9582  Add "y/n" to BooleanConverter
8868  ConvertUtils.convert does not support zero-length arrays
8810  PropertyUtil.getPropertyType() should support MappedPropertyDecriptors


