<!--
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.
-->
<html>
<head>
<title>Status File for Jakarta Commons "Lang" Component</title>
</head>
<body bgcolor="white">


<div align="center">
<h1>The Jakarta Commons <em>Lang</em> Component</h1>
$Id$<br />
<a href="#Introduction">[Introduction]</a>
<a href="#Dependencies">[Dependencies]</a>
<a href="#Release Info">[Release Info]</a>
<a href="#Known Issues">[Known Issues]</a>
<a href="#Action Items">[Action Items]</a>
<a href="#Committers">[Committers]</a>
<br /><br />
</div>


<a name="Introduction"></a>
<h3>1.  INTRODUCTION</h3>

<p>The <em>Lang</em> Component contains a set of Java classes that provide
a basic set of common utility code on top of the standard Java classes.
The following principal classes are included:</p>
<ul>
<li><strong>Main package</strong> - A package for the manipulation of basic Java classes
<ul>
 <li><strong>ArrayUtils</strong> - Helper for manipulating arrays.</li>
 <li><strong>BitField</strong> - A class to assist with manipulating bits.</li>
 <li><strong>BooleanUtils</strong> - Helper for boolean and java.lang.Boolean.</li>
 <li><strong>CharEncoding</strong> - Character encoding names required of every implementation of the Java platform.</li>
 <li><strong>CharRange</strong> - A range of characters.</li>
 <li><strong>CharSet</strong> - A set of characters.</li>
 <li><strong>CharSetUtils</strong> - Methods for dealing with CharSets, which are sets of characters such as [a-z] and [abcdez].</li>
 <li><strong>CharUtils</strong> - Helper for operations on char primities and Character objects.</li>
 <li><strong>ClassUtils</strong> - Helper for manipulating java.lang.Class objects.</li>
 <li><strong>ObjectUtils</strong> - Helper for java.lang.Object.</li>
 <li><strong>RandomStringUtils</strong> - Helper for creating randomised Strings.</li>
 <li><strong>SerializationUtils</strong> - Helper for serializing Objects.</li>
 <li><strong>StringEscapeUtils</strong> - Utility for escaping and unescaping Strings.</li>
 <li><strong>StringUtils</strong> - Helper for java.lang.String.</li>
 <li><strong>SystemUtils</strong> - Utility class defining the Java system properties.</li>
 <li><strong>Validate</strong> - A class to simplify method argument validation.</li>
 <li><strong>WordUtils</strong> - Utility for working with words.</li>
</ul></li>

<li><strong>Builder package</strong> - A package for the creation of equals, hashCode, compareTo and toString methods.
<ul>
 <li><strong>ToStringBuilder</strong> - Helper for building toString methods.</li>
 <li><strong>EqualsBuilder</strong> - Helper for building equals methods.</li>
 <li><strong>HashCodeBuilder</strong> - Helper for building hashCode methods.</li>
 <li><strong>CompareToBuilder</strong> - Helper for building compareTo methods.</li>
 <li><strong>ReflectionToStringBuilder</strong> - Helper for building toString methods using reflection.</li>
 <li><strong>ToStringStyle</strong> - Controls string formatting for <strong>ToStringBuilder</strong>.</li>
 <li><strong>StandardToStringStyle</strong> - Works with <strong>ToStringBuilder</strong> to create a toString.</li>
</ul></li>

<li><strong>Enums package</strong> - A package for the creation of enumerated types. Note: The package was previously named <strong>Enum</strong>.
<ul>
 <li><strong>EnumUtils</strong> - Helper for manipulating enumerated types.</li>
 <li><strong>Enum</strong> - Abstract superclass for enumerated types to extend.</li>
 <li><strong>ValuedEnum</strong> - Superclass for enumerated types with an integer constant.</li>
</ul></li>

<li><strong>Exception package</strong> - A package for the creation and manipulation of nested exceptions.</li>
<ul>
 <li><strong>ExceptionUtils</strong> - Helper for manipulating exceptions.</li>
 <li><strong>NestableException</strong> - An exception that supports a nested exception.</li>
 <li><strong>NestableRuntimeException</strong> - An exception that supports a nested exception.</li>
 <li><strong>NestableError</strong> - An exception that supports a nested exception.</li>
</ul></li>

<li><strong>Math package</strong> - A package for simple business (not scientific) maths classes.
<ul>
 <li><strong>DoubleRange</strong> - Represents an inclusive range of doubles.</li>
 <li><strong>FloatRange</strong> - Represents an inclusive range of floats.</li>
 <li><strong>Fraction</strong> - A fraction.</li>
 <li><strong>IntRange</strong> - Represents an inclusive range of ints.</li>
 <li><strong>JVMRandom</strong> - An implementation of Random that does its best to appear to sit on top of java.lang.Math's private Random class.</li>
 <li><strong>LongRange</strong> - Represents an inclusive range of longs.</li>
 <li><strong>NumberRange</strong> - Represents an inclusive range of <strong>Number</strong> objects of the same type.</li>
 <li><strong>NumberUtils</strong> - Helper for java.lang.Number and its subclasses.</li>
 <li><strong>RandomUtils</strong> - A utility class for working with random numbers.</li>
 <li><strong>Range</strong> - A range of numbers, of which there are classes representing Numbers, ints, doubles, longs and floats.</li>
</ul></li>

<li><strong>Mutable package</strong> - A package for typed mutable wrappers to primitive values and Object.
<ul>
 <li><strong>MutableByte</strong> - A mutable byte wrapper.</li>
 <li><strong>MutableDouble</strong> - A mutable double wrapper.</li>
 <li><strong>MutableFloat</strong> - A mutable float wrapper.</li>
 <li><strong>MutableInt</strong> - A mutable int wrapper.</li>
 <li><strong>MutableLong</strong> - A mutable long wrapper.</li>
 <li><strong>MutableObject</strong> - A mutable Object wrapper.</li>
 <li><strong>MutableShort</strong> - A mutable short wrapper.</li>
</ul></li>

<li><strong>Time package</strong> - A package for date/time related utilities.
<ul>
 <li><strong>DateFormatUtils</strong> - Aids in formatting Dates.</li>
 <li><strong>DateUtils</strong> - Aids in manipulating Dates.</li>
 <li><strong>DurationFormatUtils</strong> - Duration formatting utilities and constants.</li>
 <li><strong>FastDateFormat</strong> - Optimised version of SimpleDateFormat.</li>
 <li><strong>StopWatch</strong> - Records durations, represented by milliseconds.</li>
</ul></li>

</ul>


<a name="Dependencies"></a>
<h3>2.  DEPENDENCIES</h3>

<p>The <em>Lang</em> component is dependent upon the following external
components for development and use:</p>
<ul>
<li><a href="http://java.sun.com/j2se">Java Development Kit</a>
    (Version 1.2 or later)</li>
<li><a href="http://www.junit.org">JUnit Testing Framework</a>
    (Version 3.8.1 or later) - for unit tests only, not required
    for deployment</li>
<li><a href="http://ant.apache.org">Apache Ant</a>
    (Version 1.6 or later) - for building distributions</li>
</ul>


<a name="Release Info"></a>
<h3>3.  RELEASE INFO</h3>

<p>Current Release: 
<a href="http://www.apache.org/dist/jakarta/commons/lang/">Version 2.1</a>
</p>

<p>Planned Next Release:  
Undetermined
</p>


<a name="Known Issues"></a>
<h3>4.  KNOWN ISSUES</h3>
<p>
<ul>
</ul>
</p>


<a name="Action Items"></a>
<h3>5.  ACTION ITEMS</h3>

<p>Want to help?  Here's some "to do" items the team has identified as possibly being in scope for Lang.
Note that all are still under discussion, so please mail the list before actioning.</p>
<ul>
<li>DateRange/Duration class.</li>
<li>CloneUtils - utility class to enable cloning via various different mechanisms.</li>
<li>StringUtils.reverseSplit(String, String delim, int count). Should basically be a 'reverseArray(reverseDelimitedString(split(txt, delim, count)))'.</li>
<li>AStringBuffer - A StringBuffer implementation with additional methods from StringUtils.</li>
<li>O(n) - Document all algorithm-implementing methods with the order. Possibly with an O(n) on the end of each parameterm or with an @order tag.</li>
<li>Money and Currency. Maybe separate project.</li>
<li>Code examples - Document as many static methods as possible with example usage.</li>
<li>Faster StringTokeniser - Is Java's slow?</li>
<li>StringUtilsNPE - A StringUtils that doesn't like nulls.</li>
</ul>


<a name="Committers"></a>
<h3>6.  COMMITTERS</h3>

<p>The following individuals are the primary developers and maintainers of this
component.  Developers who plan to use <em>Lang</em> in their own
projects are encouraged to collaborate on the future development of this
component to ensure that it continues to meet a variety of needs.</p>
<ul>
<li><a href="mailto:bayard@apache.org">Henri Yandell</a></li>
<li><a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a></li>
<li><a href="mailto:scolebourne@joda.org">Stephen Colebourne</a></li>
<li><a href="mailto:stevencaswell@apache.org">Steven Caswell</a></li>
<li><a href="mailto:rdonkin@apache.org">Robert Burrell Donkin</a></li>
<li><a href="mailto:ggregory@seagullsw.com">Gary Gregory</a></li>
<li><a href="mailto:phil@steitz.com">Phil Steitz</a></li>
<li><a href="mailto:fredrik@apache.org">Fredrik Westermarck</a></li>
<!-- New committers, add your name here -->
</ul>

</body>
</html>
