* Release 1.1:

2001-12-03  Michael Bayne  <mdb@bering>

	* build.xml:
	Added a build task for generating a class hierarchy diagram using viztool.

	* src/java/com/samskivert/util/StringUtil.java:
	Added toString(boolean[]).

2001-11-29  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/xml/ValidatedSetNextRule.java:
	Added a rule that allows for object validation before it is passed up to
	its parent. Useful for making sure an object was fully parsed before
	throwing it into the mix.

	* src/java/com/samskivert/xml/SetNextFieldRule.java:
	Added toString().

	* src/java/com/samskivert/xml/SetFieldRule.java:
	Don't skip field setting when the body text is empty because we might want
	to set an empty array field or something.

	* src/java/com/samskivert/xml/SetNextFieldRule.java:
	Created a rule like SetNext but that sets the child object into a field of
	the parent rather than calling a method with the child as an argument.

	* src/java/com/samskivert/util/StringUtil.java:
	Javadoc edit.

	* src/java/com/samskivert/util/StringUtil.java:
	Modified toString() so that it can be optionally provided with opening and
	closing box characters (the parentheses in (0, 1, 2, 3)).

2001-11-26  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/ValueMarshaller.java, src/java/com/samskivert/xml/SetFieldRule.java, src/java/com/samskivert/xml/SetPropertyFieldsRule.java:
	Moved the value marshalling code out of SetFieldRule and into a separate
	class. Created a digester rule that sets public fields of objects based on
	element attributes.

	* src/java/com/samskivert/xml/CallMethodSpecialRule.java:
	Need to be able to throw an exception in parseAndSet().

	* src/java/com/samskivert/util/Tuple.java:
	Made Tuple serializable.

	* build.xml:
	Pass -breakiter to javadoc so it doesn't complain.

	* src/java/com/samskivert/util/HashIntMap.java:
	Forgot 'implements Serializable'.

	* tests/src/java/com/samskivert/util/HashIntMapTest.java:
	Created unit test for HashIntMap.

	* src/java/com/samskivert/util/HashIntMap.java:
	Made HashIntMap serializable and moved test code into a test driver.

	* src/java/com/samskivert/util/Tuple.java:
	Add equals() and hashCode() implementations that allow a Tuple to be used
	as a HashMap key.

	* src/java/com/samskivert/util/CompoundIterator.java:
	Fixed a bug with hasNext().

2001-11-20  Michael Bayne  <mdb@bering>

	* build.xml:
	Moved the optimization compile parameter into a property to make it easier
	to change and more obvious.

	* src/java/com/samskivert/velocity/DispatcherServlet.java:
	We should have been using setProperty() not put() and accordingly we can't
	set a logger object in the properties, but must set the logger class.

	* src/java/com/samskivert/velocity/ServletContextLogger.java:
	Be smarter about extracting the servlet context from the application
	context reference.

	* src/java/com/samskivert/velocity/DispatcherServlet.java, src/java/com/samskivert/velocity/ServletContextLogger.java:
	Add servlet context logger during servlet initialization phase. Allow
	servlet context to be specified at construct time to servlet context
	logger.

	* src/java/com/samskivert/velocity/ServletContextLogger.java:
	Added a log system implementation that routes log messages to the servlet
	context so that we don't have to fiddle around with Velocity trying to
	create velocity.log files in inopportune places that collide with
	velocity.log files from other Velocity-using applications.

	* src/java/com/samskivert/util/CompoundIterator.java:
	Created an iterator that iterates over iterators.

2001-11-18  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/StringUtil.java:
	Added support for toString()ing points and dimensions.

2001-11-17  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/xml/CheckVersionRule.java:
	Created a rule for checking file format version numbers.

	* src/java/com/samskivert/xml/CallMethodSpecialRule.java:
	Created an XML Digester rule that allows the calling code to invoke
	whatever string to argument translations it desires and then call whatever
	method it wants to on the object on the top of the stack.

	* src/java/com/samskivert/xml/SetFieldRule.java, tests/rsrc/xml/setfieldtest.xml, tests/src/java/com/samskivert/xml/SetFieldRuleTest.java:
	Created SetFieldRule which allows the XML Digester to set public fields on
	objects with automatic conversion from a string to the appropriate field
	type (currently supports int, Integer, String, int[] and String[]).

	* src/java/com/samskivert/xml/package.html:
	Formatting.

	* tests/build.xml:
	Require that JUnit forks so that we don't end up with wacky conflicts
	between xerces.jar loaded by ant and our own copies of an XML parser
	implementation.

	* src/java/com/samskivert/xml/SimpleParser.java:
	Added header.

2001-11-10  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/jdbc/SimpleRepository.java:
	If the connection chokes while we're opening it, we need to let the
	connection provider know that it's no longer any good.

	* build.xml: OptimizeIt!

2001-11-09  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/xml/SimpleParser.java:
	Modified simple parser to take either an absolute path to the file being
	parsed or an input stream.

2001-11-08  Michael Bayne  <mdb@bering>

	* tests/src/java/com/samskivert/servlet/SiteResourceLoaderTest.java:
	SiteResourceLoader no longer automatically falls back to the servlet
	context, so we have to simulate that ourselves.

	* tests/build.xml:
	Don't find anything with Test in it, just anything that ends with Test.

	* src/java/com/samskivert/io/NestableIOException.java, src/java/com/samskivert/xml/SimpleParser.java:
	Created NestableIOException for things that need to throw an IOException
	that contains another exception.

	Use NestableIOException in SimpleParser when the parser chokes.

2001-11-06  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/velocity/Application.java, src/java/com/samskivert/velocity/DispatcherServlet.java:
	Removed some debug logging.

	* src/java/com/samskivert/velocity/Application.java, src/java/com/samskivert/velocity/DispatcherServlet.java, src/java/com/samskivert/velocity/SiteResourceManager.java, src/java/com/samskivert/servlet/MessageManager.java, src/java/com/samskivert/servlet/SiteResourceLoader.java:
	A crapload of changes: load more stuff from servlet config; message
	manager now supports site-specific translation messages; application
	automatically configures Velocity to use things like the
	SiteResourceManager and the ImportDirective.

	* src/java/com/samskivert/velocity/SiteJarResourceLoader.java:
	Pass SiteResourceLoader in constructor, changed name to
	SiteJarResourceLoader, no longer pass fallbackToServletContext argument.

	* src/java/com/samskivert/servlet/SiteResourceLoader.java, src/java/com/samskivert/velocity/SiteResourceManager.java:
	Commented out some debug log messages.

	* src/java/com/samskivert/servlet/MessageManager.java:
	Added code to cache resolved resource bundles in the request object so
	that we don't have to re-resolve the bundle for every single message
	lookup.

	* src/java/com/samskivert/velocity/SiteResourceManager.java:
	Activate caching for the time being.

	* src/java/com/samskivert/servlet/SiteResourceLoader.java:
	Need to explicitly check to make sure the site-specific jar file exists.

	* src/java/com/samskivert/velocity/Application.java, src/java/com/samskivert/velocity/DispatcherServlet.java, src/java/com/samskivert/velocity/ImportDirective.java, src/java/com/samskivert/velocity/ServletContextResourceLoader.java, src/java/com/samskivert/velocity/SiteJarResourceLoader.java, src/java/com/samskivert/velocity/SiteResourceKey.java, src/java/com/samskivert/velocity/SiteResourceManager.java:
	Many changes to provide site-specific resource loading (we're almost
	there) and to bring things up to date with some Velocity changes Geir made
	at my prompting.

	* src/java/com/samskivert/servlet/SiteResourceLoader.java:
	Added ability to retrieve last modified time of the site-specific jar
	file.

	* src/java/com/samskivert/servlet/SiteIdentifier.java:
	Added clarification to documentation indicating the valid range of values
	for site identifiers.

	* src/java/com/samskivert/servlet/IndiscriminateSiteIdentifier.java:
	Documentation fix.

	* src/java/com/samskivert/util/IntListUtil.java, tests/src/java/com/samskivert/util/IntListUtilTest.java:
	Created a version of ListUtil that works with arrays of ints.

	* src/java/com/samskivert/util/ListUtil.java:
	Clear out the last element of the array when the rest of the array is
	shifted down to remove an element.

2001-11-05  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/servlet/SiteResourceLoader.java, tests/src/java/com/samskivert/servlet/SiteResourceLoaderTest.java:
	Added a version of getResourceAsStream() that takes the site identifier
	for when the site has already been identified.

	* docs/notes.txt: Notes.

	* lib/README:
	Updated library dependencies.

	* tests/README, tests/build.xml, tests/rsrc/servlet/srl/README, tests/rsrc/servlet/srl/default/body.txt, tests/rsrc/servlet/srl/default/footer.txt, tests/rsrc/servlet/srl/default/header.txt, tests/rsrc/servlet/srl/defaultout.txt, tests/rsrc/servlet/srl/site1.jar, tests/rsrc/servlet/srl/site1out.txt, tests/rsrc/servlet/srl/site2.jar, tests/rsrc/servlet/srl/site2out.txt, src/java/com/samskivert/test/TestUtil.java:
	Created a testing framework for the samskivert library based on JUnit and
	ant. The test drivers are located in a separate hierarchy and are built
	and invoked as a single ant target.

	* src/java/com/samskivert/servlet/SiteResourceLoader.java, tests/src/java/com/samskivert/servlet/SiteResourceLoaderTest.java:
	Created site resource loader which loads resources based on the site
	identified from an http request. Also created a unit test driver for the
	loader.

2001-11-02  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/velocity/DispatcherServlet.java:
	Geir didn't like velocityWillInit(), so he created initVelocity() which we
	override when setting the application context.

	* src/java/com/samskivert/velocity/DispatcherServlet.java:
	Have to set the application context in velocityWillInit() (which I added)
	so that it's around before Velocity.init() gets called, which happens in
	super.init().

	* src/java/com/samskivert/velocity/ServletContextResourceLoader.java:
	Be more robust and log a warning if we're used without first properly
	setting the servlet context into the application context.

	* src/java/com/samskivert/velocity/DispatcherServlet.java, src/java/com/samskivert/velocity/ServletContextResourceLoader.java:
	Modified dispatcher servlet to stick servlet context into Velocity's
	application context and implemented a servlet context resource loader
	which loads resources via ServletContext.getResourceAsStream().

	* build.xml:
	Fixed classpath so that things in classes are preferred, things in
	lib/*.jar are next and things in /usr/share/java/*.jar are last.

	* src/java/com/samskivert/velocity/Application.java:
	Fixed spelling error: createSiteIdentifier(), not createSiteIdentifer().

	* src/java/com/samskivert/servlet/JDBCTableSiteIdentifier.java:
	Sort the domain mappings once we've loaded them; fixed a SQL bug; wrote
	toString() for the mapping object.

2001-11-01  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/servlet/JDBCTableSiteIdentifier.java, src/sql/create_site_tables.mysql:
	Created a site identifier that reads data from a JDBC table.

	* src/java/com/samskivert/velocity/Application.java, src/java/com/samskivert/velocity/DispatcherServlet.java:
	Changed preInit() to postInit() in Application so that calls to things
	like createSiteIdentifier() can happen after the application is
	initialized and has access to things like connection providers.

	* src/java/com/samskivert/jdbc/Repository.java:
	Made Operation public because otherwise I can't do something like this:

	public FooRepository
	    extends SimpleRepository implements SimpleRepository.Operation
	{
	}

	which seems wacky to me but I can see how we may not have entered the
	protected namespace of the extended class while we're processing our
	interface implementation declarations. Seems a bit like a bug though.

	* src/sql/create_user_tables.mysql:
	Formatting.

	* src/java/com/samskivert/util/ServiceUnavailableException.java:
	Created a runtime exception that can be thrown if for some reason a
	service can't make its services available (like the database is down, or
	their team lost, or their girlfriend turned out to be a guy).

	* src/java/com/samskivert/velocity/Application.java, src/java/com/samskivert/velocity/DispatcherServlet.java:
	Applications now create a site identifier at init time which can be used
	to identify sites in the course of operating the application.

	* src/java/com/samskivert/velocity/FormTool.java:
	Added action() and submit() which make doing standard things like a hidden
	form field named "action" and a submit button named "submit" more
	convenient.

	* src/java/com/samskivert/velocity/FormTool.java:
	Added support for checkbox form elements.

	* src/java/com/samskivert/velocity/FormTool.java:
	Extracted common code, added support for password input fields.

	* src/sql/create_user_tables.mysql, src/java/com/samskivert/servlet/user/User.java, src/java/com/samskivert/servlet/user/UserRepository.java:
	The big name-change ola: userid -> userId, etc. Added siteId to user
	record (and table).

2001-10-31  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/servlet/IndiscriminateSiteIdentifier.java, src/java/com/samskivert/servlet/SiteIdentifier.java:
	Created a site identifier interface which is used to determine through
	which site a particular request originated.

	* src/java/com/samskivert/velocity/DispatcherServlet.java, src/java/com/samskivert/velocity/FormTool.java:
	Created a form tool for generating form fields that automatically inherit
	the values from the request parameters. Modified dispatcher servlet to put
	one in the context for every request.

	* src/java/com/samskivert/velocity/DispatcherServlet.java:
	Needed a FriendlyException import.

	* src/java/com/samskivert/servlet/util/DataValidationException.java, src/java/com/samskivert/servlet/util/ExceptionMap.java, src/java/com/samskivert/servlet/util/FriendlyException.java, src/java/com/samskivert/servlet/util/HTMLUtil.java, src/java/com/samskivert/servlet/util/ParameterUtil.java, src/java/com/samskivert/velocity/Application.java, src/java/com/samskivert/velocity/DispatcherServlet.java, src/java/com/samskivert/velocity/DummyLogic.java, src/java/com/samskivert/velocity/InvocationContext.java, src/java/com/samskivert/velocity/Logic.java, src/java/com/samskivert/velocity/MessageResolver.java, src/java/com/samskivert/velocity/package.html:
	Converted my web application framework to work with Velocity and cleaned
	up some other stuff (removed multiple application support because it was
	pointless). Moved some general purpose things into servlet.util (still
	need to modify the WebMacro version of the framework to use the general
	purpose versions).

	* docs/notes.txt: Notes.

2001-10-29  Michael Bayne  <mdb@bering>

	* docs/notes.txt: Notes.

2001-10-25  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/jdbc/StaticConnectionProvider.java:
	Better error reporting.

2001-10-18  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/StringUtil.java:
	Added a version of hexlate() that only prints out the first N bytes.

2001-10-17  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/swing/VGroupLayout.java:
	Was missing a break in a switch statement.

2001-10-15  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/xml/SimpleParser.java:
	Created a simple extensible parser class to take care of common
	character data gathering and file parsing machinations.

2001-10-15  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/IntTuple.java:
	Created specialization of tuple for holding a pair of ints.

2001-10-09  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/swing/GroupLayoutTest.java, src/java/com/samskivert/swing/HGroupLayout.java, src/java/com/samskivert/swing/VGroupLayout.java:
	Fixed a bug in the right justification code related to insets handling.

	* src/java/com/samskivert/swing/HGroupLayout.java, src/java/com/samskivert/swing/VGroupLayout.java:
	Added code to deal with left-over pixels that may occur due to rounding
	error when the number of free components doesn't divide evenly into the
	number of pixels they need to occupy.

2001-10-04  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/Config.java:
	Added getProperties() which allows one to fetch the properties object
	associated with a particular namespace identifier.

2001-10-03  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/MethodFinder.java:
	Added a version of findMethod() that takes the arguments themselves rather
	than the types of the arguments.

	* src/java/com/samskivert/util/ClassUtil.java, src/java/com/samskivert/util/MethodFinder.java:
	More comment edits.

	* src/java/com/samskivert/swing/Controller.java, src/java/com/samskivert/util/ClassUtil.java, src/java/com/samskivert/util/LoopingThread.java, src/java/com/samskivert/util/MethodFinder.java:
	Fixed up javadoc comments. Removed some unneeded final declarations in
	Methodfinder.

	* build.xml:
	Updated Sun's javadoc URL.

	* src/java/com/samskivert/util/ClassUtil.java, src/java/com/samskivert/util/MethodFinder.java:
	Adapted code from Paul Holser for looking up a reflected method that
	matches a certain set of argument types that works the compiler works.

2001-10-02  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/LoopingThread.java:
	Modified code to handle an exception that propagates up past iterate(). It
	still causes the thread to exit by default, but it provides a mechanism
	for overriding that behavior and it logs the exception rather than quietly
	dying.

2001-09-28  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/jdbc/MySQLLiaison.java:
	Close the statement that we use to get the last inserted id.

2001-09-27  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/CollectionUtil.java:
	Added toIntArray() which converts the contents of a collection to an int
	array.

2001-09-21  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/io/PersistenceException.java, src/java/com/samskivert/jdbc/ConnectionProvider.java, src/java/com/samskivert/jdbc/Repository.java, src/java/com/samskivert/jdbc/SimpleRepository.java, src/java/com/samskivert/jdbc/StaticConnectionProvider.java, src/java/com/samskivert/servlet/user/UserExistsException.java, src/java/com/samskivert/servlet/user/UserManager.java, src/java/com/samskivert/servlet/user/UserRepository.java:
	Moved PersistenceException into com.samskivert.io because it's not
	specific to JDBC.

	* src/java/com/samskivert/util/ListUtil.java:
	Added indexOf() and indexOfEqual().

2001-09-20  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/jdbc/LiaisonRegistry.java, src/java/com/samskivert/jdbc/MySQLLiaison.java:
	Liaison fixups.

	* src/java/com/samskivert/util/ConfigUtil.java:
	Throw a FileNotFoundException in loadProperties() if we are unable to
	locate the properties file in the classpath.

	* src/java/com/samskivert/jdbc/LiaisonRegistry.java:
	Log a warning if we find that we need to use the default database liaison
	because that's generally a bad deal.

	* src/java/com/samskivert/jdbc/DatabaseLiaison.java, src/java/com/samskivert/jdbc/DefaultLiaison.java, src/java/com/samskivert/jdbc/LiaisonRegistry.java, src/java/com/samskivert/jdbc/MySQLLiaison.java, src/java/com/samskivert/jdbc/SimpleRepository.java:
	Finished up liaison stuff.

	* src/java/com/samskivert/jdbc/SimpleRepository.java, src/java/com/samskivert/jdbc/StaticConnectionProvider.java, src/java/com/samskivert/jdbc/jora/Session.java, src/java/com/samskivert/servlet/user/UserExistsException.java, src/java/com/samskivert/servlet/user/UserManager.java, src/java/com/samskivert/servlet/user/UserRepository.java, src/java/com/samskivert/io/PersistenceException.java, src/java/com/samskivert/jdbc/ConnectionProvider.java, src/java/com/samskivert/jdbc/DatabaseLiaison.java, src/java/com/samskivert/jdbc/JORARepository.java, src/java/com/samskivert/jdbc/LiaisonRegistry.java, src/java/com/samskivert/jdbc/MySQLLiaison.java, src/java/com/samskivert/jdbc/MySQLRepository.java, src/java/com/samskivert/jdbc/Repository.java:
	Serious database services rethink. It's cleaner, more loosely coupled and
	more extensible now. Whee!

	* docs/notes.txt:
	Crapload of notes on database services.

	* build.xml:
	Switch from jarfile= to file=. It's the New Way (tm).

2001-09-15  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/servlet/user/UserRepository.java, src/java/com/samskivert/util/Collections.java, src/java/com/samskivert/util/HashIntMap.java, src/java/com/samskivert/util/IntMap.java, src/java/com/samskivert/util/IntervalManager.java:
	Reworked IntMap to be a proper Java collection in the style that the
	java.util collections established. This means that IntMap becomes
	HashIntMap, IntMap is now an interface that extends the standard Map
	interface and a new Collections class is provided that allows one to
	create a synchronized wrapper around an IntMap.

2001-09-14  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/swing/util/SwingUtil.java:
	Added getPolygon() to return a polygon bounding a given rectangle.

2001-08-30  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/swing/ToolTipManager.java:
	Separate the tool tip interval frequency from the mouse delay before a
	tool tip is shown.

2001-08-29  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/util/Config.java:
	Added support for retrieving boolean configuration values.

2001-08-28  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/swing/ToolTipManager.java, src/java/com/samskivert/swing/ToolTipObserver.java, src/java/com/samskivert/swing/ToolTipProvider.java, src/java/com/samskivert/swing/util/ToolTipUtil.java:
	Added ToolTipProvider interface, and track and pass along the mouse
	position associated with tool tip display so that tool tips can be
	positioned more appropriately within their container.

2001-08-23  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/swing/util/SwingUtil.java:
	Added drawStringCentered().

	* src/java/com/samskivert/swing/ToolTipManager.java, src/java/com/samskivert/swing/ToolTipObserver.java:
	Monitor the component's ancestor events so that the tool tip interval
	can be registered and unregistered based on component visibility.

2001-08-22  Walter Korman  <shaper@bering>

	* src/java/com/samskivert/swing/ToolTipManager.java, src/java/com/samskivert/swing/ToolTipObserver.java:
	Initial version of classes to support working with tool tips in a more
	generic, extensible and lightweight fashion than is possible with the
	current incarnation of Swing tool tips.

2001-08-15  Michael Bayne  <mdb@bering>

	* src/java/com/samskivert/util/StringUtil.java:
	Added support for enumerations and iterators to toString().

	* build.xml:
	Pulled more things out into parameters.

	* build.xml:
	Added dist to the all target.

	* src/java/com/samskivert/util/ListUtil.java:
	Added testAndAdd() for adding elements only if they are not already in the
	list. Modified clear...() and remove...() to cope with being passed a null
	list.

	* src/java/com/samskivert/util/ListUtil.java:
	Added contains() and containsEqual().

	* src/java/com/samskivert/util/ListUtil.java:
	Created a class for managing lists of object arrays for those times when
	you don't want the overhead of a separate object that goes along with
	ArrayList, and when you don't need strict list ordering.

* Release 1.01:

2001-08-13  Michael Bayne  <mdb@bering>

	* code/swing/Controller.java: Added classes to support having
	controllers that manage high level user interface interaction. See
	the controller class for explanation.

* Release 1.0:

2001-08-12  Michael Bayne  <mdb@bering>

	* various: Initial release.

$Id: NEWS,v 1.5 2002/12/12 19:02:19 mdb Exp $
