<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.5 i586) [Netscape]">
</head>
<body text="#000000" bgcolor="#D5DB8C" link="#993300" vlink="#663300" alink="#FF0000">

<center><img SRC="ccl.gif" height=200 width=356></center>
<a href="http://www.kclee.com/clemens/java/ccl/"><b><tt><font size=+1>ccl</font></tt></b></a>
is reusable Java library distributed under the terms of the <a href="http://www.mozilla.org/MPL/">Mozilla
Public License</a> (or GNU GPL or GNU LGPL, whichever of these you like).
<p>It contains code I wrote and (re-)used for several projects (<a href="../../jacob/index.html">Jacob</a>,
<a href="../timelog/index.html"><i>Time</i>log</a>,
<a href="../webpresenter/index.html">WebPresenter</a>,
and <a href="../index.html">others</a>) and plan to use again for new projects
in the future.
<p>Maybe this code is of some use for you too.
<p>
How the gui part of the library is used to create a base application, can
be seen from the source code examples <a href="guiexample/Main.java">Main.java</a> and
<a href="guiexample/ViewController.java">ViewController.java</a>.
It is a base application with a frame, menu, info box, and
help page. The code can be used to jump start your own
application.<br>
A precompiled project setup of the example with start and build script etc. can be
found in this <a href="guiexample/guiexample.zip">guiexample.zip</a> file.
<p>
You can always find the newest version of this page at: <a href="http://www.kclee.com/clemens/java/ccl/">http://www.kclee.com/clemens/java/ccl/</a>
<p>
<br>Here is the meat: <a href="api/index.html">The <b><tt><font size=+1>ccl</font></tt></b>
API Documentation</a>

<H2>
	<A NAME="features"></A>Features</H2>

	<UL>
	<LI>Basic GUI/Swing application framework and utility classes
</LI><LI>Additional string methods
</LI><LI>Vector methods
</LI><LI>File methods
</LI><LI>Debug and assertion support
</LI><LI>Test framework
</LI>
	</UL>

<h2><a name="requirements"></a>System Requirements</h2>
	Java JDK 1.1 (plus Swing), 1.2, or 1.3. 
(Optional, Xalan version 2 needed for xml helper class.)
<UL></UL>
	

<h2><a name="download"></a>Download</h2>
	<A HREF="ccl30.64.zip">ccl Version 30.64</A>&nbsp;<FORM ACTION="mailto:clemens@kclee.com?subject=ccl: please notify me for updates" METHOD="POST" enctype="text/plain">If
	you want to get notified when new updates for ccl are available please
	press the following button:
	<BR><INPUT TYPE=SUBMIT VALUE="Please Notify Me"><FONT SIZE=-1>(thanks for
	your interest)</FORM></FONT>

<h2>
Installation</h2>
Just unzip <tt>ccl30.64.zip</tt> and add <tt>ccl30.64/lib/ccl.jar</tt> to your classpath. Now you can use the ccl package in your project. With<p><tt>java ccl.Main -check</tt><p>you can trigger a <b>ccl</b> self test.
There is also a script in the <tt>bin</tt> directory
which you can use to invoke the self test.
<p>
<tt>./bin/ccl -check</tt><p>

This should work most of the time. Eventually you need to
specify in the shell script or batch file 
some environment variables explicitly if the script could not
figure out everything itself.

<p>If you use the help feature from ccl.swing.MainJFrame, you
have to add JavaHelp to your classpath. For convenience reasons JavaHelp is distributed together with ccl (just add <tt>ccl30.64/lib/jhbasic.jar</tt> to your classpath). 

<H2>
<A NAME="release"></A>Release History</H2>
<!--<H2><a name="release"></a>Release History</H2>
	<h3>Version 30.64</h3>
	Version 30.64 has been released on November 6, 2002<p>...
<h4>What's New</h4><ol><li>...
</li></ol><h4>Fixed Bugs</h4><ol><li>...
</li></ol><H3><A NAME=29.63></A>Version 29.63</H3>
         Version 29.63 has been released on October 6, 2002<p>Changed license from MPL 1.0 to MPL 1.1/GPL 2.0/LGPL 2.1.
<h4>What's New</h4><ol><li>The license used for the ccl library has been modified from
   the Mozilla Public License version 1.0 to Mozilla Public
   License version 1.1 or GNU General Public License version 2
   or GNU Lesser General Public License version 2.1. The user
   is free to use the ccl library under each of these three
   licenses, whichever she/he prefers.
</li></ol><h4>Fixed Bugs</h4><ol><li>A stupid test was forgotten to be removed that could only
   succeed on my own development environment.
</li><li>Some self tests were disabled by mistake.
</li></ol><H3><A NAME=28.61></A>Version 28.61</H3>
         Version 28.61 has been released on September 22, 2002<p>Ccl test class supports now the JUnit framework.
<h4>What's New</h4><ol><li>Ccl test framework supports now test classes originally
   developed to use the JUnit framework.
</li></ol><h4>Fixed Bugs</h4><ol><li>A severe bug in method copyDir in class FileUtil, which has
   been reported by Jeff Quarrington.
</li></ol><H3><A NAME=27.59></A>Version 27.59</H3>
         Version 27.59 has been released on August 5, 2002<p>A couple of small code and documentation enhancements.
<h4>What's New</h4><ol><li>New ccl.swing.GraphicsUtil class.
</li><li>Added debugserver manual page.
</li><li>New HTML.printTitle(..) which lets you specify the text color.
</li><li>New HTML.flush() method to force to send data back to the
   client immediately.
</li><li>setBusy and isBusy methods turn frame mouse cursor to an hour
   glass and make sure no user interaction can take place 
   (in class ccl.swing.MainJFrame).
</li><li>MainJFrame has a new getHelpBroker method that can be used
   to register a Java Help broker object in your application.
</li><li>RunnableAction.actionPerformed is not final anymore. Still
   should not be overwritten normally.
</li><li>Old project files in the File menu have now automatically
   mnemonics.
</li></ol><H3><A NAME=26.57></A>Version 26.57</H3>
         Version 26.57 has been released on May 20, 2002<p>New multipart request library and debugserver shell script.
<h4>What's New</h4><ol><li>DebugServer has now its own shell script to start it up 
   (./bin/debugserver).
</li><li>Instead of using O'Reilly's servlets library ccl is now
   using Jason Pell's multipart request library. While 
   O'Reilly's had some severe license implications, Jason's
   library is under the LGPL.
</li></ol><H3><A NAME=25.54></A>Version 25.54</H3>
         Version 25.54 has been released on May 1, 2002<p>A couple of small additions and bug fixes.
<h4>What's New</h4><ol><li>New convenience method
   ccl.servlet.HTML.printFormularTextInput(..) with size of
   text field specification.
</li><li>New ccl.util.Util.centerLine(..) and formatCenter methods
   to format ascii text in center mode.
</li><li>New ccl.servlet.DebugServer which can be used to study
   details of HTTP or other network protocols.
</li><li>Slightly improved ccl.swing.DoubleList and DoubleListModel.
</li></ol><h4>Fixed Bugs</h4><ol><li>Get class path for classes without a package failed
   (ccl.util.FileUtil.getClassPath(Object)).
</li><li>Method getUserTables returned also system tables for the
   McKoi database. This is fixed now in class ccl.util.DBUtil.
</li><li>ccl.servlet.ChangedRequest is updated to the latest servlet
   api (HttpServletRequest).
</li><li>ccl.util.Util.isOSSolaris() checks now also for SunOS.
</li><li>Table name gets converted to lowercase when
   getting column info in ccl.servlet.XMLImportHandler.
   This is necessary for postgresql 7.2, this might now confuse
   other databases.
</li></ol><H3><A NAME=24.51></A>Version 24.51</H3>
         Version 24.51 has been released on December 30, 2001<p>Minor bug fixes.
<h4>Fixed Bugs</h4><ol><li>Added new tests for ccl.servlet.XMLImportHandler class using
   a PostgreSQL database. If the user has no JDBC driver 
   installed for this database, the tests will be skipped.
</li><li>ccl.util.Init class did not accept project file names without
   a suffix.
</li></ol><H3><A NAME=23.50></A>Version 23.50</H3>
         Version 23.50 has been released on November 27, 2001<p>Minor bug fix with comman line option handling.
<h4>Fixed Bugs</h4><ol><li>Text after commas in command line option descriptions got
   truncated.
</li></ol><H3><A NAME=22.48></A>Version 22.48</H3>
         Version 22.48 has been released on October 31, 2001<p>Minor feature enhancements.
<h4>What's New</h4><ol><li>Util.untabify() method replaces tab characters with the
   necessary number of spaces.
</li><li>New convenience method ccl.xml.XMLUtil.getValueOf(file,xpath).
</li><li>New method ccl.util.FileUtil.normalizeFileName(filename) which
   returns an absolute file name but takes the system property
   "user.dir" into account (instead of the native system's
   current directory (which can't be changed that easily in 
   Java).
</li><li>New class ccl.util.ClassPathUtil which contains methods
   moved from other classes dealing with finding files or
   directories from the classpath or inside jar archives.
</li></ol><H3><A NAME=21.47></A>Version 21.47</H3>
         Version 21.47 has been released on September 14, 2001<p>Minor feature enhancements.
<h4>What's New</h4><ol><li>XML helper class supports now Xalan version 2. Support for 
   Xalan version 1 has been dropped.
</li><li>New method ccl.swing.SwingUtil.maximizeWindow( Window, float )
   to set the size of a window to a given percentage of the 
   screen size.
</li></ol><H3><A NAME=20.46></A>Version 20.46</H3>
         Version 20.46 has been released on September 8, 2001<p>New ascii text formatting methods (e.g. block mode).
<h4>What's New</h4><ol><li>New methods to format ascii text in block mode or left
   aligned (ccl.util.Util.formatBlock(..) and ...formatLeft(..)).
   This is especially useful to be invoked from an xslt parser.
</li><li>There is new example code that demonstrates the gui framework.
   It is a base application with a frame, menu, info box, and
   help page which can be used to jump start your own
   application. Take a look at doc/guiexample/Main.java and
   doc/guiexample/ViewController.java. A precompiled project
   setup of the example with start and build script etc. can be
   found at doc/guiexample/guiexample.zip.
</li><li>Ccl lib comes with an ant build.xml script now. This should
   help to compile the whole lib on your own. The ant script does
   not yet help to compile the native Linux shared library.
</li><li>New method ccl.util.Util.systemAndWait( String ) and
   ...systemAndGetError( String ). These are just added for
   convenience, as the same methods have been there already with
   an Vector argument.
</li><li>New method ccl.util.FileUtil.getFiles( dir, prefix, suffixes )
   gets all base file and dir names inside a given directory 
   which map the given prefix and suffix list.
</li></ol><h4>Bugs Fixed</h4><ol><li>Exception in ccl.swing.DoubleList when clicking in left list
   below last line.
</li><li>Exception in ccl.util.FileUtil.copy is not printed to standard
   error anymore.
</li></ol><H3><A NAME=19.44></A>Version 19.44</H3>
         Version 19.44 has been released on July 22, 2001<p>Minor API change.
<h4>What's New</h4><ol><li>Moved method ccl.servlet.XMLExporter.printEscaped(..) to
   class ccl.xml.XMLUtil.escape(..). This method replaces 
   characters in a string with an XML entity reference if
   necessary. Credit for this code goes to the Apache Xerces
   project from which it is taken.
</li></ol><H3><A NAME=18.43></A>Version 18.43</H3>
         Version 18.43 has been released on July 15, 2001<p>Minor bug fix version.
<h4>Bugs Fixed</h4><ol><li>Return value of FileUtil.move(..) was different from what
   the documentation said.
</li></ol><H3><A NAME=17.42></A>Version 17.42</H3>
         Version 17.42 has been released on June 25, 2001<p>Minor enhancements.
<h4>What's New</h4><ol><li>More convenience methods for converting xml via xslt in
   ccl.xml.XMLUtil.
</li><li>New native method setLocation( Frame f, int x, int y ) for
   Linux as my last hope to workaround a nasty Java bug.
</li></ol><H3><A NAME=16.41></A>Version 16.41</H3>
         Version 16.41 has been released on June 10, 2001<p>Minor new features.
<h4>What's New</h4><ol><li>New class ccl.servlet.CSV to generate spread sheet data
   in csv format.
</li><li>New method in ccl.servlet.HTML to convert a null or empty
   string into a space in HTML (&nbsp;).
</li><li>Added ccl.util.Util.getFirstDayOfMonth().
</li></ol><h4>Bugs Fixed</h4><ol><li>ReflectionClassLoader failed loading classes from package
   javax in version Java 1.1.
</li><li>A bug fix in FileUtil.readStream(). End of stream was not
   always successfully recognized.
</li></ol><H3><A NAME=15.37></A>Version 15.37</H3>
         Version 15.37 has been released on April 22, 2001<p>New XMLUtil class.
<h4>What's New</h4><ol><li>ccl.xml.XMLUtil is an utility class which makes
   transforming xml via xslt stylesheets just as convenient
   as invoking a shell script. You provide either files or
   strings and get the transformed xml file back as a string
   or file. No need to know the classes used from Xalan in
   detail.
</li></ol><h4>Bugs Fixed</h4><ol><li>None.
</li></ol><H3><A NAME=14.36></A>Version 14.36</H3>
         Version 14.36 has been released on April 19, 2001<p>Improved HTML formatting class.
<h4>What's New</h4><ol><li>Class ccl.servlet.HTML has better formatting of data
   tables.
</li><li>Class ccl.util.DBUtil supports now InstantDB as well as
   Sybase.
</li></ol><h4>Bugs Fixed</h4><ol><li>None.
</li></ol><H3><A NAME=13.33></A>Version 13.33</H3>
         Version 13.33 has been released on March 11, 2001<p>New servlet support classes and a TextViewer class.
<h4>What's New</h4><ol><li>New class ccl.servlet.HTML.
</li><li>New class ccl.servlet.XMLExporter.
</li><li>New class ccl.servlet.XMLImporter and 
   ccl.servlet.XMLImportHandler.
</li><li>New class ccl.util.DBUtil.
</li><li>New class ccl.swing.TextViewer.
</li></ol><h4>Bugs Fixed</h4><ol><li>None.
</li></ol><H3><A NAME=12.32></A>Version 12.32</H3>
         Version 12.32 has been released on February 28, 2001<p>Minor new features.
<h4>What's New</h4><ol><li>Util has new methods to get formatted memory information
   (percentage of used memory etc.).
</li><li>FileUtil has new methods 'getBaseName' and 'getDirName'.
</li></ol><h4>Bugs Fixed</h4><ol><li>InputCancelDialog had a severe (off by one) bug in its
   history handling.
</li></ol><H3><A NAME=11.31></A>Version 11.31</H3>
         Version 11.31 has been released on February 11, 2001<p>Minor new features.
<h4>What's New</h4><ol><li>Text field input dialog (ccl.swing.InputCancelDialog)
   has optional drop down list.
</li><li>FTPUtil is a wrapper of the sun.net.ftp.FtpClient class.
   This class provides convenience methods for ftp put and
   get in binary mode.
</li></ol><h4>Bugs Fixed</h4><ol><li>FileUtil.getFiles(String,String) is now also able to
   process empty ("") file suffixes.
</li></ol><H3><A NAME=10.29></A>Version 10.29</H3>
         Version 10.29 has been released on December 2, 2000<p>A minor bug fix.
<h4>What's New</h4><ol><li>Method 'getTimeWithMillis' in ccl.Util.
</li><li>Shell script and batch file included to start self test.
</li><li>Makefile (with hardcoded paths) for compiling native code
   for Linux is included.
</li></ol><h4>Bugs Fixed</h4><ol><li>For applications installed under a classes directory 
   the application path was not identified correctly.
</li></ol><H3><A NAME=9.26></A>Version 9.26</H3>
         Version 9.26 has been released on October 27, 2000<p>Init class does use awt only if necessary.
<h4>What's New</h4><ol><li>Init class does not use awt if not necessary. The awt is
   only needed for color objects anyway. In batch mode the
   background colors is hardly of relevance. Now the class
   can be used on machines which have no X installed.
</li></ol><h4>Bugs Fixed</h4><ol><li>None.
</li></ol><H3><A NAME=8.24></A>Version 8.24</H3>
         Version 8.24 has been released on September 28, 2000<p>Minor additions.
<h4>What's New</h4><ol><li>ccl.util.OutputErrorStreamManager captures stdio and
   stderr streams.
</li></ol><h4>Bugs Fixed</h4><ol><li>Miscellaneous.
</li></ol><H3><A NAME=7.22></A>Version 7.22</H3>
         Version 7.22 has been released on June 30, 2000<p>Some new GUI classes.
<h4>What's New</h4><ol><li>New class BusyWindow, CCLTreeNode, HighlightableList,
   ListCancelMultiSelector, ListEditDialog, ListToListPanel,
	MetaJDialog, MemoryDialog, MemoryPanel, and ThreadsDialog.
</li><li>SplitPane provides workaround for 
   setDividerLocation( double ) bug in Swing JSplitPane class.
   Thanks to Marcel Nijman for this code.
</li><li>JCFUtil class which offers some helper methods for
   analyzing Java byte code files. It uses Matt Yourst's
   Java Class File library.
</li><li>New package ccl.platform with Linux class to access some
   Unix system functions (e.g. create symbolic link etc.).
</li></ol><h4>Bugs Fixed</h4><ol><li>Miscellaneous.
</li></ol><H3><A NAME=6.20></A>Version 6.20</H3>
         Version 6.20 has been released on April 17, 2000<p>Some new GUI classes.
<h4>What's New</h4><ol><li>New class BusyWindow, CCLTreeNode, HighlightableList,
   ListCancelMultiSelector, ListEditDialog, ListToListPanel,
	MetaJDialog, MemoryDialog, MemoryPanel, and ThreadsDialog.
</li><li>SplitPane provides workaround for 
   setDividerLocation( double ) bug in Swing JSplitPane class.
   Thanks to Marcel Nijman for this code.
</li><li>JCFUtil class which offers some helper methods for
   analyzing Java byte code files. It uses Matt Yourst's
   Java Class File library.
</li><li>New package ccl.platform with Linux class to access some
   Unix system functions (e.g. create symbolic link etc.).
</li></ol><h4>Bugs Fixed</h4><ol><li>Miscellaneous.
</li></ol><H3><A NAME=5.18></A>Version 5.18</H3>
         Version 5.18 has been released on December 16, 1999<p>New date methods and GUI date text field.
<h4>What's New</h4><ol><li>New GUI date text widget ccl.swing.DateField.
</li><li>New date methods in ccl.util.Util.
</li></ol><h4>Bugs Fixed</h4><ol><li>Miscellaneous.
</li></ol><H3><A NAME=4.11></A>Version 4.11</H3>
         Version 4.11 has been released on October 18, 1999<p>New GUI/Swing package and some minor ccl.util classes.
<h4>What's New</h4><ol><li>New GUI/Swing application framework and utility classes.
</li><li>New ThreadExitSecurityManager, History, Initializable,
   Testable classes.
</li></ol><H3><A NAME=3.9></A>Version 3.9</H3>
         Version 3.9 has been released on August 1, 1999<p>New ccl.util classes.
<h4>What's New</h4><ol><li>Direction, Enum, FileObject, History, Init, Option,
   ReflectionClassLoader, Singleton, SysEnv classes
   and Exitable interface.
</li></ol><H3><A NAME=2.7></A>Version 2.7</H3>
         Version 2.7 has been released on July 29, 1999<p>New support for Windows ini or KDE config files.
<H3><A NAME=1.6></A>Version 1.6</H3>
         Version 1.6 has been released on July 26, 1999<p>\-->


Version 30.64 has been released on November 6, 2002<p>...
<h4>What's New</h4><ol><li>...
</li></ol><h4>Fixed Bugs</h4><ol><li>...
</li></ol>


<A HREF="releases.html">Here</A> is the documentation about changes of
previous versions.

<h2>
Authors</h2>
Below is a list of additional
contributors and supporters: Thanks to
<ul>
<li>
Doug Lea for ccl.util.Comparable interface and ccl.util.Util.quicksort(..) methods
(they are Public Domain and taken out of his collection library)</li>

<li>
Elliotte Rusty Harold for ccl.util.StreamCopier copied from Java I/O p.
43.</li>
<li>Benjamin "Quincy" Cabell V (thethe@wpi.edu), Besiex Software for StringMethods.java which is renamed to ccl/util/IniFile.java and which is distributed under the terms of the GNU Library General Public License.</li>
<li>Paddy Ramanathan &lt;rpaddy@concordesolutions.com> for ccl.util.SysEnv. It was a contribution for the Jacob project.</li>
<li>My managers at UBS Warburg who let me use and maintain this library for project development.</li>
<li>Marcel Nijman for SplitPane code, which I took out of a news group.</li>
<li><a href="mailto:yourst@laserstarts.com">Matt T. Yourst</a> for <a href="http://www.laserstarslcom/articles/ddj/insidejcf/files/index.html">Java Class File</a> library which is used by the the ccl.jcf package. The Matt's jcf library, which
is redistributed with this library, has the following copyright disclaimer:<p>
<i>JCF Copyright</i><br>
<i>All included source code, binaries, and information ("the Software")
are Copyright 1997 Matt Yourst ("the Author"). Permission is granted to
use the included files for any purpose so long as appropriate credit is
given to the Author.</i>
</li>
<li>Glen Cordrey for a tip to set the application home directory automatically in a batch file.</li>
<li>Brian Uegawachi and jalal for bug reports.</li>
<li>The Apache Xerces project for making code for escaping
a string with XML entity references freely available.</li>
<li>Jason Pell for a 
<a href="http://www.geocities.com/jasonpell/programs.html#multipartrequest">multipart request library</a>
under the LGPL
which ccl uses for importing data from an XML file into an SQL
database using a servlet [2002-05-20].</li>
<li>Alex Molochnikov (alex@gestalt.com) for example code
to set the hour glass mouse cursor properly [2002-05-20].</li>
<li>Jeff Quarrington for reporting a severe bug in method copyDir in class FileUtil [2002-09-22].</li>
</ul>
<!--A big thank you especially to my project manager Jeff Armstrong at Warburg
Dillon and Read for allowing me to use and
maintain this library on our current project.-->
<h2>
Links</h2>
<ul>
<li><a href="../index.html">Clemens' Java Page</a> - take a look at the other Java stuff I did which also uses the ccl lib.</li>
<li><a href="../CCLJavaCodingStandard.html">CCL Java Coding Standard</a> - my personel code conventions used also for the ccl code.</li>
</ul>
<p>
<hr><a href="http://www.kclee.com/clemens/">Chr. Clemens Lee</a>
&lt;<a href="mailto:clemens@kclee.com">clemens@kclee.com</a>> (my <a href="http://www.kclee.com/clemens/resume/">resume</a>),
last updated: $Date: 2002/10/06 16:42:38 $

</body>
</html>
