$Id$

                        Commons Lang Package
                            Version 2.1
                           Release Notes


INTRODUCTION:

This document contains the release notes for the 2.1 version of Apache Jakarta Commons Lang.
Commons Lang is a set of utility functions and reusable components that
should be of use in any Java environment.


INCOMPATIBLE CHANGES:

- The Nestable interface defines the method indexOfThrowable(Class).
Previously the implementations checked only for a specific Class.
Now they check for subclasses of that Class as well.
For most situations this will be the expected behaviour (ie. its a bug fix).
If it causes problems, please use the ExceptionUtils.indexOfThrowable(Class) method instead.
Note that the ExceptionUtils method is available in v1.0 and v2.0 of commons-lang and has not been changed.
(An alternative to this is to change the public static matchSubclasses flag on NestableDelegate.
However, we don't recommend that as a long-term solution.)

- The StopWatch class has had much extra validation added.
If your code previously relied on unusual aspects, it may no longer work.


DEPRECATIONS:

- The enum package has been renamed to enums for JDK1.5 compilance.
All functionality is identical, just the package has changed.
This package will be removed in v3.0.

- NumberUtils.stringToInt - renamed to toInt

- DateUtils - four constants, MILLIS_IN_* have been deprecated as they were defined
as int not long. The replacements are MILLIS_PER_*. 


NEW FEATURES:

New:
- Mutable package - contains basic classes that hold an Object or primitive
and provide both get and set methods.
- DurationFormatUtils - provides various methods for formatting durations
- CharEncoding - definitions of constants for character encoding work
- CharUtils - utilities for working with characters

Updated:
- ArrayUtils - many more methods, especially List-like methods
- BooleanUtils - isTrue and isFalse methods that handle null
- ClassUtils - primitive to wrapper class conversion methods
- ClassUtils - class name comparator
- IllegalClassException - extra constructor for common instanceof case
- NotImplementedException - supports nested exceptions
- ObjectUtils - hashcode method handling null
- StringUtils - isAsciiPrintable to check the contents of a string
             -- ordinalIndexOf to find the nth index of a string
             -- various remove methods to remove parts of a string
             -- various split methods to provide more control over splitting a string
             -- defaultIfEmpty to default a string if null or empty
- SystemUtils - methods to get system properties as File objects
             -- extra constants representing system properties
- Validate - new methods to check whether all elements in a collection are of a specific type
- WordUtils - new methods to capitalize based on a set of specified delimiters

- EqualsBuilder - now provides setter to internal state
- ToStringStyle - new style, short prefix style
- ReflectionToStringBuilder - more flags to control the output with regards to statics

- ExceptionUtils - added indexOfType methods that check subclasses, thus leaving the existing
indexOfThrowable method untouched (see incompatible changes section)

- NumberUtils - various string to number parsing methods added

- DateUtils - methods added to compare dates in various ways
           -- method to parse a date string using multiple patterns
- FastDateFormat - extra formatting methods that take in a millisecond long value
                -- additional static factory methods
- StopWatch - new methods for split behaviour


BUG FIXES:

19331  General case: infinite loop: ToStringBuilder.reflectionToString
23174  EqualsBuilder.append(Object[], Object[]) throws NPE
23356  Make DurationFormatUtils public!
23557  WordUtils.capitalizeFully(String str) should take a delimiters
23683  New method for converting a primitive Class to its corresponding wrapper
23430  Minor javadoc fixes for StringUtils.contains(String, String)
23590  make optional parameters in FastDateFormat really optional
24056  Documentation error in StringUtils.replace
25227  StringEscapeUtils.unescapeHtml() doesn't handle hex entities
25454  new StringUtils.replaceChars behaves differently from old Ch
25560  DateUtils.truncate() is off by one hour when using a date in DST switch 'zone'
25627  DateUtils constants should be long
25683  Add method that validates Collection elements are a correct
25849  Add SystemUtils methods for directory properties.
26616  ClassCastException in Enum.equals(Object)
26699  Tokenizer Enhancements: reset input string, static CSV
26734  NullPointerException in EqualsBuilder.append(Object[], Object[])
26877  Add SystemUtils.AWT_TOOLKIT and others.
26922  public static boolean DateUtils.equals(Date dt1, Date dt2)
27592  WordUtils capitalize improvement
27876  ReflectionToStringBuilder.toString(null) throws exception by design
27877  Make ClassUtils methods null-safe and not throw an IAE.
28468  StringUtils.defaultString: Documentation error
28554  Add hashCode-support to class ObjectUtils
29082  Enhancement of ExceptionUtils.CAUSE_METHOD_NAMES
29149  StringEscapeUtils.unescapeHtml() doesn't handle an empty entity
29294  lang.math.Fraction class deficiencies
29673  ExceptionUtils: new getCause() methodname (for tomcat)
29794  Add convenience format(long) methods to FastDateForma
30328  HashCodeBuilder does not use the same values as Boolean (fixed as documentation)
30334  New class proposal: CharacterEncoding
30674  parseDate class from HttpClient's DateParser class
30815  ArrayUtils.isEquals() throws ClassCastException when array1
30929  Nestable.indexOfThrowable(Class)  uses Class.equals() to match
31395  DateUtils.truncate oddity at the far end of the Date spectrum
31478  Compile error with JDK 5 "enum" is a keyword
31572  o.a.c.lang.enum.ValuedEnum: 'enum'is a keyword in JDK1.5.0
31933  ToStringStyle setArrayEnd handled null incorrectly
32133  SystemUtils fails init on HP-UX
32198  Error in JavaDoc for StringUtils.chomp(String, String)
32625  Can't subclass EqualsBuilder because isEquals is private
33067  EqualsBuilder.append(Object[], Object[]) crashes with a NullPointerException if an element of the first array is null
33069  EqualsBuilder.append(Object[], Object[]) incorrectly checks that rhs[i] is instance of lhs[i]'s class
33574  unbalanced ReflectionToStringBuilder
33737  ExceptionUtils.addCauseMethodName(String) does not check for duplicates.
